This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
[PATCH] Split helper classification macros from mathcalls.h
- From: "Gabriel F. T. Gomes" <gftg at linux dot vnet dot ibm dot com>
- To: libc-alpha at sourceware dot org
- Date: Wed, 8 Mar 2017 13:45:20 -0300
- Subject: [PATCH] Split helper classification macros from mathcalls.h
- Authentication-results: sourceware.org; auth=none
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 <gftg@linux.vnet.ibm.com>
* 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 <math/bits/mathcalls-helper-functions.h>
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
+ <http://www.gnu.org/licenses/>. */
+
+
+#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 <bits/mathcalls-helper-functions.h>
#include <bits/mathcalls.h>
#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 <bits/mathcalls-helper-functions.h>
# include <bits/mathcalls.h>
# 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 <bits/mathcalls-helper-functions.h>
# include <bits/mathcalls.h>
# undef _Mdouble_
# undef _Mdouble_BEGIN_NAMESPACE
--
2.4.11