[PATCH v2 6/6] math: Disable exception check for soft-fp routine with compiler-rt

H.J. Lu hjl.tools@gmail.com
Thu Feb 26 01:03:23 GMT 2026


On Thu, Feb 26, 2026 at 2:32 AM Adhemerval Zanella
<adhemerval.zanella@linaro.org> wrote:
>
> The compiler-rt does not support throwing floating-point exceptions
> for math builtin (__addtf3, __multf3, __divtf3, etc.) [1][2][3].
> So disable the check when compiler-rt is used instead of libgcc.

I think we check capability instead of HAVE_COMPILER_RT_RUNTIME.

> Checked on x86_64-linux-gnu and aarch64-linux-gnu with clang.
>
> [1] https://github.com/llvm/llvm-project/issues/59924
> [2] https://github.com/llvm/llvm-project/issues/60141
> [3] https://github.com/llvm/llvm-project/issues/172499
> ---
>  config.h.in                             |  3 +++
>  configure                               |  4 +++
>  configure.ac                            |  3 +++
>  sysdeps/aarch64/math-tests-exceptions.h | 34 +++++++++++++++++++++++++
>  sysdeps/x86_64/math-tests-exceptions.h  | 33 ++++++++++++++++++++++++
>  5 files changed, 77 insertions(+)
>  create mode 100644 sysdeps/aarch64/math-tests-exceptions.h
>  create mode 100644 sysdeps/x86_64/math-tests-exceptions.h
>
> diff --git a/config.h.in b/config.h.in
> index 125532ec6b..215b223e12 100644
> --- a/config.h.in
> +++ b/config.h.in
> @@ -231,6 +231,9 @@
>  /* Define to 1 if compiler runtime provides __sfp_handle_exceptions */
>  #undef HAVE_SFP_HANDLE_EXCEPTIONS
>
> +/* Define to 1 if compiler uses compiler-rt instead of libgcc.  */
> +#undef HAVE_COMPILER_RT_RUNTIME
> +
>  /*
>   */
>
> diff --git a/configure b/configure
> index d156912063..4ccf5600d7 100755
> --- a/configure
> +++ b/configure
> @@ -9398,6 +9398,10 @@ esac
>  fi
>  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $libc_cv_runtime_library" >&5
>  printf "%s\n" "$libc_cv_runtime_library" >&6; }
> +if test $libc_cv_runtime_library = compiler-rt; then
> +  printf "%s\n" "#define HAVE_COMPILER_RT_RUNTIME 1" >>confdefs.h
> +
> +fi
>  config_vars="$config_vars
>  libgcc-name = $libc_cv_libgcc"
>  config_vars="$config_vars
> diff --git a/configure.ac b/configure.ac
> index 776695486a..9ced9ec0f5 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -2152,6 +2152,9 @@ AC_CACHE_CHECK([for the usable compiler runtime library], [libc_cv_runtime_libra
>        ;;
>      *) AC_MSG_FAILURE([non supported compiler runtime library]) ;;
>    esac])
> +if test $libc_cv_runtime_library = compiler-rt; then
> +  AC_DEFINE([HAVE_COMPILER_RT_RUNTIME])
> +fi
>  LIBC_CONFIG_VAR([libgcc-name], [$libc_cv_libgcc])
>  LIBC_CONFIG_VAR([libgcc_eh-name], [$libc_cv_libgcc_eh])
>
> diff --git a/sysdeps/aarch64/math-tests-exceptions.h b/sysdeps/aarch64/math-tests-exceptions.h
> new file mode 100644
> index 0000000000..dc824c25a5
> --- /dev/null
> +++ b/sysdeps/aarch64/math-tests-exceptions.h
> @@ -0,0 +1,34 @@
> +/* Configuration for math tests: support for exceptions.  AArch64 version.
> +   Copyright (C) 2026 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
> +   <https://www.gnu.org/licenses/>.  */
> +
> +#ifndef _MATH_TESTS_EXCEPTIONS_H
> +#define _MATH_TESTS_EXCEPTIONS_H 1
> +
> +#define EXCEPTION_TESTS_float  1
> +#define EXCEPTION_TESTS_double 1
> +/* compiler-rt does not support floating-point exceptions for the
> +   long double / __float128 math builtins.  */
> +#ifdef HAVE_COMPILER_RT_RUNTIME
> +# define EXCEPTION_TESTS_long_double   0
> +# define EXCEPTION_TESTS_float128      0
> +#else
> +# define EXCEPTION_TESTS_long_double   1
> +# define EXCEPTION_TESTS_float128      1
> +#endif
> +
> +#endif /* math-tests-exceptions.h.  */
> diff --git a/sysdeps/x86_64/math-tests-exceptions.h b/sysdeps/x86_64/math-tests-exceptions.h
> new file mode 100644
> index 0000000000..fa60397b79
> --- /dev/null
> +++ b/sysdeps/x86_64/math-tests-exceptions.h
> @@ -0,0 +1,33 @@
> +/* Configuration for math tests: support for exceptions.  x86_64 version.
> +   Copyright (C) 2026 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
> +   <https://www.gnu.org/licenses/>.  */
> +
> +#ifndef _MATH_TESTS_EXCEPTIONS_H
> +#define _MATH_TESTS_EXCEPTIONS_H 1
> +
> +#define EXCEPTION_TESTS_float  1
> +#define EXCEPTION_TESTS_double 1
> +#define EXCEPTION_TESTS_long_double    1
> +/* compiler-rt does not support floating-point exceptions for the
> +   _float128 math builtins.  */
> +#ifdef HAVE_COMPILER_RT_RUNTIME
> +# define EXCEPTION_TESTS_float128      0
> +#else
> +# define EXCEPTION_TESTS_float128      1
> +#endif
> +
> +#endif /* math-tests-exceptions.h.  */
> --
> 2.43.0
>


-- 
H.J.


More information about the Libc-alpha mailing list