diff --git a/include/bits/mathcalls-macros.h b/include/bits/mathcalls-macros.h new file mode 100644 index 0000000000..bd997bd5d4 --- /dev/null +++ b/include/bits/mathcalls-macros.h @@ -0,0 +1,12 @@ +#include + +/* The file contains the prototypes for all the + actual math functions. These macros are used for those prototypes, + so we can easily declare each function as both `name' and `__name', + and can declare the float versions `namef' and `__namef' for internal + use. */ + +#undef __MATHDECLX +#define __MATHDECLX(type, function,suffix, args, attrib) \ + __MATHDECL_1(type, function,suffix, args) __attribute__ (attrib); \ + __MATHDECL_1(type, __CONCAT(__,function),suffix, args) __attribute__ (attrib) diff --git a/include/math.h b/include/math.h index 035fd160ff..9ba4708801 100644 --- a/include/math.h +++ b/include/math.h @@ -10,6 +10,11 @@ /* Now define the internal interfaces. */ extern int __signgam; +# undef __MATHDECLX +# define __MATHDECLX(type, function,suffix, args, attrib) \ + __MATHDECL_1(type, function,suffix, args) __attribute__ (attrib); \ + __MATHDECL_1(type, __CONCAT(__,function),suffix, args) __attribute__ (attrib) + # if IS_IN (libc) || IS_IN (libm) hidden_proto (__finite) hidden_proto (__isinf) diff --git a/math/Makefile b/math/Makefile index 6f0d2108b2..56cb5d1eed 100644 --- a/math/Makefile +++ b/math/Makefile @@ -35,6 +35,7 @@ headers := \ bits/long-double.h \ bits/math-vector.h \ bits/mathcalls-helper-functions.h \ + bits/mathcalls-macros.h \ bits/mathcalls-narrow.h \ bits/mathcalls.h \ bits/mathdef.h \ diff --git a/math/bits/mathcalls-macros.h b/math/bits/mathcalls-macros.h new file mode 100644 index 0000000000..56d6d4da60 --- /dev/null +++ b/math/bits/mathcalls-macros.h @@ -0,0 +1,48 @@ +/* Macros for math function declarations. + Copyright (C) 2024 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 + . */ + +#define __SIMD_DECL(function) __CONCAT (__DECL_SIMD_, function) + +#define __MATHCALL_VEC(function, suffix, args) \ + __SIMD_DECL (__MATH_PRECNAME (function, suffix)) \ + __MATHCALL (function, suffix, args) + +#define __MATHDECL_VEC(type, function,suffix, args) \ + __SIMD_DECL (__MATH_PRECNAME (function, suffix)) \ + __MATHDECL(type, function,suffix, args) + +#define __MATHCALL(function,suffix, args) \ + __MATHDECL (_Mdouble_,function,suffix, args) +#define __MATHDECL(type, function,suffix, args) \ + __MATHDECL_1(type, function,suffix, args); \ + __MATHDECL_1(type, __CONCAT(__,function),suffix, args) +#define __MATHCALLX(function,suffix, args, attrib) \ + __MATHDECLX (_Mdouble_,function,suffix, args, attrib) +#define __MATHDECLX(type, function,suffix, args, attrib) \ + __MATHDECL_1(type, function,suffix, args) __attribute__ (attrib); +#define __MATHDECL_1_IMPL(type, function, suffix, args) \ + extern type __MATH_PRECNAME(function,suffix) args __THROW +#define __MATHDECL_1(type, function, suffix, args) \ + __MATHDECL_1_IMPL(type, function, suffix, args) +/* Ignore the alias by default. The alias is only useful with + redirections. */ +#define __MATHDECL_ALIAS(type, function, suffix, args, alias) \ + __MATHDECL_1(type, function, suffix, args) + +#define __MATHREDIR(type, function, suffix, args, to) \ + extern type __REDIRECT_NTH (__MATH_PRECNAME (function, suffix), args, to) diff --git a/math/math.h b/math/math.h index 1e300c4223..599ca3ae79 100644 --- a/math/math.h +++ b/math/math.h @@ -268,42 +268,7 @@ enum }; #endif -/* The file contains the prototypes for all the - actual math functions. These macros are used for those prototypes, - so we can easily declare each function as both `name' and `__name', - and can declare the float versions `namef' and `__namef'. */ - -#define __SIMD_DECL(function) __CONCAT (__DECL_SIMD_, function) - -#define __MATHCALL_VEC(function, suffix, args) \ - __SIMD_DECL (__MATH_PRECNAME (function, suffix)) \ - __MATHCALL (function, suffix, args) - -#define __MATHDECL_VEC(type, function,suffix, args) \ - __SIMD_DECL (__MATH_PRECNAME (function, suffix)) \ - __MATHDECL(type, function,suffix, args) - -#define __MATHCALL(function,suffix, args) \ - __MATHDECL (_Mdouble_,function,suffix, args) -#define __MATHDECL(type, function,suffix, args) \ - __MATHDECL_1(type, function,suffix, args); \ - __MATHDECL_1(type, __CONCAT(__,function),suffix, args) -#define __MATHCALLX(function,suffix, args, attrib) \ - __MATHDECLX (_Mdouble_,function,suffix, args, attrib) -#define __MATHDECLX(type, function,suffix, args, attrib) \ - __MATHDECL_1(type, function,suffix, args) __attribute__ (attrib); \ - __MATHDECL_1(type, __CONCAT(__,function),suffix, args) __attribute__ (attrib) -#define __MATHDECL_1_IMPL(type, function, suffix, args) \ - extern type __MATH_PRECNAME(function,suffix) args __THROW -#define __MATHDECL_1(type, function, suffix, args) \ - __MATHDECL_1_IMPL(type, function, suffix, args) -/* Ignore the alias by default. The alias is only useful with - redirections. */ -#define __MATHDECL_ALIAS(type, function, suffix, args, alias) \ - __MATHDECL_1(type, function, suffix, args) - -#define __MATHREDIR(type, function, suffix, args, to) \ - extern type __REDIRECT_NTH (__MATH_PRECNAME (function, suffix), args, to) +#include #define _Mdouble_ double #define __MATH_PRECNAME(name,r) __CONCAT(name,r)