target/89125 - BSD and math functions

Back story: When GCC is configured and built on non-glibc platforms,
it seems very little to no effort is made to enumerate the available
C99 libm functions.  It is all or nothing for C99 libm.  The patch
introduces a new function, used on only FreeBSD, to inform gcc that
it has C99 libm functions (minus a few which clearly GCC does not check
nor test).

2022-04-15  Steven G. Kargl  <kargl@gcc.gnu.org>

	PR target/89125
	* config/freebsd.h: Define TARGET_LIBC_HAS_FUNCTION to be
	bsd_libc_has_function.
	* targhooks.cc (bsd_libc_has_function): New function.
	Expand the supported math functions to inclue C99 libm.
	* targhooks.h (bsd_libc_has_function): New Prototype.
This commit is contained in:
Steve Kargl 2022-04-25 09:23:56 +02:00 committed by Richard Biener
parent 4f77738c3b
commit b6e22db856
3 changed files with 16 additions and 1 deletions

View File

@ -55,7 +55,7 @@ along with GCC; see the file COPYING3. If not see
#endif
#undef TARGET_LIBC_HAS_FUNCTION
#define TARGET_LIBC_HAS_FUNCTION no_c99_libc_has_function
#define TARGET_LIBC_HAS_FUNCTION bsd_libc_has_function
/* Use --as-needed -lgcc_s for eh support. */
#ifdef HAVE_LD_AS_NEEDED

View File

@ -1843,6 +1843,20 @@ no_c99_libc_has_function (enum function_class fn_class ATTRIBUTE_UNUSED,
return false;
}
/* Assume some c99 functions are present at the runtime including sincos. */
bool
bsd_libc_has_function (enum function_class fn_class,
tree type ATTRIBUTE_UNUSED)
{
if (fn_class == function_c94
|| fn_class == function_c99_misc
|| fn_class == function_sincos)
return true;
return false;
}
tree
default_builtin_tm_load_store (tree ARG_UNUSED (type))
{

View File

@ -212,6 +212,7 @@ extern bool default_libc_has_function (enum function_class, tree);
extern bool default_libc_has_fast_function (int fcode);
extern bool no_c99_libc_has_function (enum function_class, tree);
extern bool gnu_libc_has_function (enum function_class, tree);
extern bool bsd_libc_has_function (enum function_class, tree);
extern tree default_builtin_tm_load_store (tree);