From patchwork Fri Mar 17 20:21:27 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: 740524 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 3vlGwh5R3Mz9ryZ for ; Sat, 18 Mar 2017 07:22:28 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; secure) header.d=sourceware.org header.i=@sourceware.org header.b="Tkr8DaQz"; 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:in-reply-to:references :message-id; q=dns; s=default; b=fIVqkFe7cjTwOZdhSYecxg2FSa1AjzQ w3QkYENcOqBcIniyAWiW+3KXS38XCzU9jQNu3c+VA+j/PQz/hAQXQMkEEYagis8B LPxmgt4PP0gQJKycQSrzTpG6nsgESv4hIgi2ypL775ehEzxP5def+oTC0NMWDC/y Rfmokd0Pl5Y4= 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:in-reply-to:references :message-id; s=default; bh=ZBJcO5BZNkBTDWjVJXEXw5Atem0=; b=Tkr8D aQzvjgKYjJeibSAmwsS/HAR3k9jd2lfSCV3EjWetb6/7eWL7MGj8yoFKLnhMKhhT GvcqP53IgH2j1cgmaUMI0THBsnIBhEU+EiQW5JerhJbJUMNq2paQKu+WhQ6OtOzr q3rKP0oDqU9hXiFKPLmNAP9TnPEG8ZHx5HlMcY= Received: (qmail 89921 invoked by alias); 17 Mar 2017 20:22:21 -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 89911 invoked by uid 89); 17 Mar 2017 20:22:20 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-24.9 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_LAZY_DOMAIN_SECURITY, RCVD_IN_DNSWL_LOW autolearn=ham version=3.3.2 spammy= X-HELO: mx0a-001b2d01.pphosted.com From: "Gabriel F. T. Gomes" To: libc-alpha@sourceware.org Subject: [PATCH v2 1/4] Macroize inclusion of math-finite.h (part 1) Date: Fri, 17 Mar 2017 17:21:27 -0300 In-Reply-To: References: X-TM-AS-MML: disable x-cbid: 17031720-0028-0000-0000-000001A214E9 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 17031720-0029-0000-0000-000014A13127 Message-Id: <1489782087-28929-1-git-send-email-gftg@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:, , definitions=2017-03-17_15:, , signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 suspectscore=1 malwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1702020001 definitions=main-1703170170 Changes since v1: - Only include math-finite.h for float and long double, when __USE_ISOC99 is defined. -- 8< -- This patch macroizes the declarations in math/bits/math-finite.h similarly to what math/bits/mathcalls.h does. For each floating-point type, the file is included once in math/math.h. This will reduce the amount of repetitive boilerplate required when adding float128 versions of these declarations. Tested for powerpc64le and s390x. 2017-03-10 Gabriel F. T. Gomes * math/math.h: Include bits/math-finite.h once per floating-point type. * math/bits/math-finite.h: Macroize all declarations by floating-point type. --- math/bits/math-finite.h | 388 +++++++++--------------------------------------- math/math.h | 36 ++++- 2 files changed, 106 insertions(+), 318 deletions(-) diff --git a/math/bits/math-finite.h b/math/bits/math-finite.h index 02da374..6cc86e7 100644 --- a/math/bits/math-finite.h +++ b/math/bits/math-finite.h @@ -20,277 +20,103 @@ # error "Never use directly; include instead." #endif -/* acos. */ -extern double __REDIRECT_NTH (acos, (double), __acos_finite); -#ifdef __USE_ISOC99 -extern float __REDIRECT_NTH (acosf, (float), __acosf_finite); -# ifdef __MATH_DECLARE_LDOUBLE -# ifdef __NO_LONG_DOUBLE_MATH -extern long double __REDIRECT_NTH (acosl, (long double), __acos_finite); -# else -extern long double __REDIRECT_NTH (acosl, (long double), __acosl_finite); -# endif -# endif +#define __REDIRFROM_X(function, reentrant, suffix) \ + function ## suffix ## reentrant +#define __REDIRFROM(...) __REDIRFROM_X(__VA_ARGS__) + +/* Redirect long double versions of the functions to the corresponding + double version if __NO_LONG_DOUBLE_MATH is defined. */ +#ifdef __NO_LONG_DOUBLE_MATH +# define __REDIRTO_X(function, reentrant, suffix) \ + __ ## function ## reentrant ## _finite +#else +# define __REDIRTO_X(function, reentrant, suffix) \ + __ ## function ## suffix ## reentrant ## _finite #endif +#define __REDIRTO(...) __REDIRTO_X(__VA_ARGS__) + +#define __MATH_REDIRCALL_X(from, args, to) \ + extern _Mdouble_ __REDIRECT_NTH (from, args, to) +#define __MATH_REDIRCALL(function, reentrant, args) \ + __MATH_REDIRCALL_X \ + (__REDIRFROM (function, reentrant, _MSUF_), args, \ + __REDIRTO (function, reentrant, _MSUF_)) +#define __MATH_REDIRCALL_2(from, reentrant, args, to) \ + __MATH_REDIRCALL_X \ + (__REDIRFROM (from, reentrant, _MSUF_), args, \ + __REDIRTO (to, reentrant, _MSUF_)) + + +/* acos. */ +__MATH_REDIRCALL (acos, , (_Mdouble_)); #if defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99 /* acosh. */ -extern double __REDIRECT_NTH (acosh, (double), __acosh_finite); -#endif -#ifdef __USE_ISOC99 -extern float __REDIRECT_NTH (acoshf, (float), __acoshf_finite); -# ifdef __MATH_DECLARE_LDOUBLE -# ifdef __NO_LONG_DOUBLE_MATH -extern long double __REDIRECT_NTH (acoshl, (long double), __acosh_finite); -# else -extern long double __REDIRECT_NTH (acoshl, (long double), __acoshl_finite); -# endif -# endif +__MATH_REDIRCALL (acosh, , (_Mdouble_)); #endif /* asin. */ -extern double __REDIRECT_NTH (asin, (double), __asin_finite); -#ifdef __USE_ISOC99 -extern float __REDIRECT_NTH (asinf, (float), __asinf_finite); -# ifdef __MATH_DECLARE_LDOUBLE -# ifdef __NO_LONG_DOUBLE_MATH -extern long double __REDIRECT_NTH (asinl, (long double), __asin_finite); -# else -extern long double __REDIRECT_NTH (asinl, (long double), __asinl_finite); -# endif -# endif -#endif +__MATH_REDIRCALL (asin, , (_Mdouble_)); /* atan2. */ -extern double __REDIRECT_NTH (atan2, (double, double), __atan2_finite); -#ifdef __USE_ISOC99 -extern float __REDIRECT_NTH (atan2f, (float, float), __atan2f_finite); -# ifdef __MATH_DECLARE_LDOUBLE -# ifdef __NO_LONG_DOUBLE_MATH -extern long double __REDIRECT_NTH (atan2l, (long double, long double), - __atan2_finite); -# else -extern long double __REDIRECT_NTH (atan2l, (long double, long double), - __atan2l_finite); -# endif -# endif -#endif +__MATH_REDIRCALL (atan2, , (_Mdouble_, _Mdouble_)); #if defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99 /* atanh. */ -extern double __REDIRECT_NTH (atanh, (double), __atanh_finite); -#endif -#ifdef __USE_ISOC99 -extern float __REDIRECT_NTH (atanhf, (float), __atanhf_finite); -# ifdef __MATH_DECLARE_LDOUBLE -# ifdef __NO_LONG_DOUBLE_MATH -extern long double __REDIRECT_NTH (atanhl, (long double), __atanh_finite); -# else -extern long double __REDIRECT_NTH (atanhl, (long double), __atanhl_finite); -# endif -# endif +__MATH_REDIRCALL (atanh, , (_Mdouble_)); #endif /* cosh. */ -extern double __REDIRECT_NTH (cosh, (double), __cosh_finite); -#ifdef __USE_ISOC99 -extern float __REDIRECT_NTH (coshf, (float), __coshf_finite); -# ifdef __MATH_DECLARE_LDOUBLE -# ifdef __NO_LONG_DOUBLE_MATH -extern long double __REDIRECT_NTH (coshl, (long double), __cosh_finite); -# else -extern long double __REDIRECT_NTH (coshl, (long double), __coshl_finite); -# endif -# endif -#endif +__MATH_REDIRCALL (cosh, , (_Mdouble_)); /* exp. */ -extern double __REDIRECT_NTH (exp, (double), __exp_finite); -#ifdef __USE_ISOC99 -extern float __REDIRECT_NTH (expf, (float), __expf_finite); -# ifdef __MATH_DECLARE_LDOUBLE -# ifdef __NO_LONG_DOUBLE_MATH -extern long double __REDIRECT_NTH (expl, (long double), __exp_finite); -# else -extern long double __REDIRECT_NTH (expl, (long double), __expl_finite); -# endif -# endif -#endif +__MATH_REDIRCALL (exp, , (_Mdouble_)); #ifdef __USE_GNU /* exp10. */ -extern double __REDIRECT_NTH (exp10, (double), __exp10_finite); -extern float __REDIRECT_NTH (exp10f, (float), __exp10f_finite); -# ifdef __MATH_DECLARE_LDOUBLE -# ifdef __NO_LONG_DOUBLE_MATH -extern long double __REDIRECT_NTH (exp10l, (long double), __exp10_finite); -# else -extern long double __REDIRECT_NTH (exp10l, (long double), __exp10l_finite); -# endif -# endif +__MATH_REDIRCALL (exp10, , (_Mdouble_)); /* pow10. */ -extern double __REDIRECT_NTH (pow10, (double), __exp10_finite); -extern float __REDIRECT_NTH (pow10f, (float), __exp10f_finite); -# ifdef __MATH_DECLARE_LDOUBLE -# ifdef __NO_LONG_DOUBLE_MATH -extern long double __REDIRECT_NTH (pow10l, (long double), __exp10_finite); -# else -extern long double __REDIRECT_NTH (pow10l, (long double), __exp10l_finite); -# endif -# endif +__MATH_REDIRCALL_2 (pow10, , (_Mdouble_), exp10); #endif #ifdef __USE_ISOC99 /* exp2. */ -extern double __REDIRECT_NTH (exp2, (double), __exp2_finite); -extern float __REDIRECT_NTH (exp2f, (float), __exp2f_finite); -# ifdef __MATH_DECLARE_LDOUBLE -# ifdef __NO_LONG_DOUBLE_MATH -extern long double __REDIRECT_NTH (exp2l, (long double), __exp2_finite); -# else -extern long double __REDIRECT_NTH (exp2l, (long double), __exp2l_finite); -# endif -# endif +__MATH_REDIRCALL (exp2, , (_Mdouble_)); #endif /* fmod. */ -extern double __REDIRECT_NTH (fmod, (double, double), __fmod_finite); -#ifdef __USE_ISOC99 -extern float __REDIRECT_NTH (fmodf, (float, float), __fmodf_finite); -# ifdef __MATH_DECLARE_LDOUBLE -# ifdef __NO_LONG_DOUBLE_MATH -extern long double __REDIRECT_NTH (fmodl, (long double, long double), - __fmod_finite); -# else -extern long double __REDIRECT_NTH (fmodl, (long double, long double), - __fmodl_finite); -# endif -# endif -#endif +__MATH_REDIRCALL (fmod, , (_Mdouble_, _Mdouble_)); #if defined __USE_XOPEN || defined __USE_ISOC99 /* hypot. */ -extern double __REDIRECT_NTH (hypot, (double, double), __hypot_finite); -#endif -#ifdef __USE_ISOC99 -extern float __REDIRECT_NTH (hypotf, (float, float), __hypotf_finite); -# ifdef __MATH_DECLARE_LDOUBLE -# ifdef __NO_LONG_DOUBLE_MATH -extern long double __REDIRECT_NTH (hypotl, (long double, long double), - __hypot_finite); -# else -extern long double __REDIRECT_NTH (hypotl, (long double, long double), - __hypotl_finite); -# endif -# endif +__MATH_REDIRCALL (hypot, , (_Mdouble_, _Mdouble_)); #endif -#if defined __USE_MISC || defined __USE_XOPEN +#if (__MATH_DECLARING_DOUBLE && (defined __USE_MISC || defined __USE_XOPEN)) \ + || (!__MATH_DECLARING_DOUBLE && defined __USE_MISC) /* j0. */ -extern double __REDIRECT_NTH (j0, (double), __j0_finite); -#endif -#if defined __USE_MISC && defined __USE_ISOC99 -extern float __REDIRECT_NTH (j0f, (float), __j0f_finite); -# ifdef __MATH_DECLARE_LDOUBLE -# ifdef __NO_LONG_DOUBLE_MATH -extern long double __REDIRECT_NTH (j0l, (long double), __j0_finite); -# else -extern long double __REDIRECT_NTH (j0l, (long double), __j0l_finite); -# endif -# endif -#endif +__MATH_REDIRCALL (j0, , (_Mdouble_)); -#if defined __USE_MISC || defined __USE_XOPEN /* y0. */ -extern double __REDIRECT_NTH (y0, (double), __y0_finite); -#endif -#if defined __USE_MISC && defined __USE_ISOC99 -extern float __REDIRECT_NTH (y0f, (float), __y0f_finite); -# ifdef __MATH_DECLARE_LDOUBLE -# ifdef __NO_LONG_DOUBLE_MATH -extern long double __REDIRECT_NTH (y0l, (long double), __y0_finite); -# else -extern long double __REDIRECT_NTH (y0l, (long double), __y0l_finite); -# endif -# endif -#endif +__MATH_REDIRCALL (y0, , (_Mdouble_)); -#if defined __USE_MISC || defined __USE_XOPEN /* j1. */ -extern double __REDIRECT_NTH (j1, (double), __j1_finite); -#endif -#if defined __USE_MISC && defined __USE_ISOC99 -extern float __REDIRECT_NTH (j1f, (float), __j1f_finite); -# ifdef __MATH_DECLARE_LDOUBLE -# ifdef __NO_LONG_DOUBLE_MATH -extern long double __REDIRECT_NTH (j1l, (long double), __j1_finite); -# else -extern long double __REDIRECT_NTH (j1l, (long double), __j1l_finite); -# endif -# endif -#endif +__MATH_REDIRCALL (j1, , (_Mdouble_)); -#if defined __USE_MISC || defined __USE_XOPEN /* y1. */ -extern double __REDIRECT_NTH (y1, (double), __y1_finite); -#endif -#if defined __USE_MISC && defined __USE_ISOC99 -extern float __REDIRECT_NTH (y1f, (float), __y1f_finite); -# ifdef __MATH_DECLARE_LDOUBLE -# ifdef __NO_LONG_DOUBLE_MATH -extern long double __REDIRECT_NTH (y1l, (long double), __y1_finite); -# else -extern long double __REDIRECT_NTH (y1l, (long double), __y1l_finite); -# endif -# endif -#endif +__MATH_REDIRCALL (y1, , (_Mdouble_)); -#if defined __USE_MISC || defined __USE_XOPEN /* jn. */ -extern double __REDIRECT_NTH (jn, (int, double), __jn_finite); -#endif -#if defined __USE_MISC && defined __USE_ISOC99 -extern float __REDIRECT_NTH (jnf, (int, float), __jnf_finite); -# ifdef __MATH_DECLARE_LDOUBLE -# ifdef __NO_LONG_DOUBLE_MATH -extern long double __REDIRECT_NTH (jnl, (int, long double), __jn_finite); -# else -extern long double __REDIRECT_NTH (jnl, (int, long double), __jnl_finite); -# endif -# endif -#endif +__MATH_REDIRCALL (jn, , (int, _Mdouble_)); -#if defined __USE_MISC || defined __USE_XOPEN /* yn. */ -extern double __REDIRECT_NTH (yn, (int, double), __yn_finite); -#endif -#if defined __USE_MISC && defined __USE_ISOC99 -extern float __REDIRECT_NTH (ynf, (int, float), __ynf_finite); -# ifdef __MATH_DECLARE_LDOUBLE -# ifdef __NO_LONG_DOUBLE_MATH -extern long double __REDIRECT_NTH (ynl, (int, long double), __yn_finite); -# else -extern long double __REDIRECT_NTH (ynl, (int, long double), __ynl_finite); -# endif -# endif +__MATH_REDIRCALL (yn, , (int, _Mdouble_)); #endif #ifdef __USE_MISC /* lgamma_r. */ -extern double __REDIRECT_NTH (lgamma_r, (double, int *), __lgamma_r_finite); -# ifdef __USE_ISOC99 -extern float __REDIRECT_NTH (lgammaf_r, (float, int *), __lgammaf_r_finite); -# ifdef __MATH_DECLARE_LDOUBLE -# ifdef __NO_LONG_DOUBLE_MATH -extern long double __REDIRECT_NTH (lgammal_r, (long double, int *), - __lgamma_r_finite); -# else -extern long double __REDIRECT_NTH (lgammal_r, (long double, int *), - __lgammal_r_finite); -# endif -# endif -# endif +__MATH_REDIRCALL (lgamma, _r, (_Mdouble_, int *)); #endif extern double __lgamma_r_finite (double, int *); @@ -360,119 +186,39 @@ __extern_always_inline long double __NTH (gammal (long double __d)) #endif /* log. */ -extern double __REDIRECT_NTH (log, (double), __log_finite); -#ifdef __USE_ISOC99 -extern float __REDIRECT_NTH (logf, (float), __logf_finite); -# ifdef __MATH_DECLARE_LDOUBLE -# ifdef __NO_LONG_DOUBLE_MATH -extern long double __REDIRECT_NTH (logl, (long double), __log_finite); -# else -extern long double __REDIRECT_NTH (logl, (long double), __logl_finite); -# endif -# endif -#endif +__MATH_REDIRCALL (log, , (_Mdouble_)); /* log10. */ -extern double __REDIRECT_NTH (log10, (double), __log10_finite); -#ifdef __USE_ISOC99 -extern float __REDIRECT_NTH (log10f, (float), __log10f_finite); -# ifdef __MATH_DECLARE_LDOUBLE -# ifdef __NO_LONG_DOUBLE_MATH -extern long double __REDIRECT_NTH (log10l, (long double), __log10_finite); -# else -extern long double __REDIRECT_NTH (log10l, (long double), __log10l_finite); -# endif -# endif -#endif +__MATH_REDIRCALL (log10, , (_Mdouble_)); #ifdef __USE_ISOC99 /* log2. */ -extern double __REDIRECT_NTH (log2, (double), __log2_finite); -extern float __REDIRECT_NTH (log2f, (float), __log2f_finite); -# ifdef __MATH_DECLARE_LDOUBLE -# ifdef __NO_LONG_DOUBLE_MATH -extern long double __REDIRECT_NTH (log2l, (long double), __log2_finite); -# else -extern long double __REDIRECT_NTH (log2l, (long double), __log2l_finite); -# endif -# endif +__MATH_REDIRCALL (log2, , (_Mdouble_)); #endif /* pow. */ -extern double __REDIRECT_NTH (pow, (double, double), __pow_finite); -#ifdef __USE_ISOC99 -extern float __REDIRECT_NTH (powf, (float, float), __powf_finite); -# ifdef __MATH_DECLARE_LDOUBLE -# ifdef __NO_LONG_DOUBLE_MATH -extern long double __REDIRECT_NTH (powl, (long double, long double), - __pow_finite); -# else -extern long double __REDIRECT_NTH (powl, (long double, long double), - __powl_finite); -# endif -# endif -#endif +__MATH_REDIRCALL (pow, , (_Mdouble_, _Mdouble_)); -#if defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99 +#if (__MATH_DECLARING_DOUBLE \ + && (defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99)) \ + || (!__MATH_DECLARING_DOUBLE) /* remainder. */ -extern double __REDIRECT_NTH (remainder, (double, double), __remainder_finite); -#endif -#ifdef __USE_ISOC99 -extern float __REDIRECT_NTH (remainderf, (float, float), __remainderf_finite); -# ifdef __MATH_DECLARE_LDOUBLE -# ifdef __NO_LONG_DOUBLE_MATH -extern long double __REDIRECT_NTH (remainderl, (long double, long double), - __remainder_finite); -# else -extern long double __REDIRECT_NTH (remainderl, (long double, long double), - __remainderl_finite); -# endif -# endif +__MATH_REDIRCALL (remainder, , (_Mdouble_, _Mdouble_)); #endif -#if (defined __USE_MISC \ - || (defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K8)) +#if (__MATH_DECLARING_DOUBLE \ + && (defined __USE_MISC \ + || (defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K8))) \ + || (!__MATH_DECLARE_LDOUBLE && defined __USE_MISC) /* scalb. */ -extern double __REDIRECT_NTH (scalb, (double, double), __scalb_finite); -#endif -#if defined __USE_MISC && defined __USE_ISOC99 -extern float __REDIRECT_NTH (scalbf, (float, float), __scalbf_finite); -# ifdef __MATH_DECLARE_LDOUBLE -# ifdef __NO_LONG_DOUBLE_MATH -extern long double __REDIRECT_NTH (scalbl, (long double, long double), - __scalb_finite); -# else -extern long double __REDIRECT_NTH (scalbl, (long double, long double), - __scalbl_finite); -# endif -# endif +__MATH_REDIRCALL (scalb, , (_Mdouble_, _Mdouble_)); #endif /* sinh. */ -extern double __REDIRECT_NTH (sinh, (double), __sinh_finite); -#ifdef __USE_ISOC99 -extern float __REDIRECT_NTH (sinhf, (float), __sinhf_finite); -# ifdef __MATH_DECLARE_LDOUBLE -# ifdef __NO_LONG_DOUBLE_MATH -extern long double __REDIRECT_NTH (sinhl, (long double), __sinh_finite); -# else -extern long double __REDIRECT_NTH (sinhl, (long double), __sinhl_finite); -# endif -# endif -#endif +__MATH_REDIRCALL (sinh, , (_Mdouble_)); /* sqrt. */ -extern double __REDIRECT_NTH (sqrt, (double), __sqrt_finite); -#ifdef __USE_ISOC99 -extern float __REDIRECT_NTH (sqrtf, (float), __sqrtf_finite); -# ifdef __MATH_DECLARE_LDOUBLE -# ifdef __NO_LONG_DOUBLE_MATH -extern long double __REDIRECT_NTH (sqrtl, (long double), __sqrt_finite); -# else -extern long double __REDIRECT_NTH (sqrtl, (long double), __sqrtl_finite); -# endif -# endif -#endif +__MATH_REDIRCALL (sqrt, , (_Mdouble_)); #if defined __USE_ISOC99 && defined __extern_always_inline /* tgamma. */ @@ -504,3 +250,11 @@ __extern_always_inline long double __NTH (tgammal (long double __d)) } # endif #endif + +#undef __REDIRFROM +#undef __REDIRFROM_X +#undef __REDIRTO +#undef __REDIRTO_X +#undef __MATH_REDIRCALL +#undef __MATH_REDIRCALL_2 +#undef __MATH_REDIRCALL_X diff --git a/math/math.h b/math/math.h index 09f0ce8..d6489df 100644 --- a/math/math.h +++ b/math/math.h @@ -569,8 +569,42 @@ extern int matherr (struct exception *__exc); /* Define special entry points to use when the compiler got told to only expect finite results. */ #if defined __FINITE_MATH_ONLY__ && __FINITE_MATH_ONLY__ > 0 + +/* Include bits/math-finite.h for double. */ +# define _Mdouble_ double +# define __MATH_DECLARING_DOUBLE 1 +# define _MSUF_ # include -#endif +# undef _Mdouble_ +# undef __MATH_DECLARING_DOUBLE +# undef _MSUF_ + +/* When __USE_ISOC99 is defined, include math-finite for float and + long double, as well. */ +# ifdef __USE_ISOC99 + +/* Include bits/math-finite.h for float. */ +# define _Mdouble_ float +# define __MATH_DECLARING_DOUBLE 0 +# define _MSUF_ f +# include +# undef _Mdouble_ +# undef __MATH_DECLARING_DOUBLE +# undef _MSUF_ + +/* Include bits/math-finite.h for long double. */ +# if __MATH_DECLARE_LDOUBLE +# define _Mdouble_ long double +# define __MATH_DECLARING_DOUBLE 0 +# define _MSUF_ l +# include +# undef _Mdouble_ +# undef __MATH_DECLARING_DOUBLE +# undef _MSUF_ +# endif + +# endif /* __USE_ISOC99. */ +#endif /* __FINITE_MATH_ONLY__ > 0. */ #ifdef __USE_ISOC99 /* If we've still got undefined comparison macros, provide defaults. */