From da27d897784665fcea8be943c78e840e68323dbe Mon Sep 17 00:00:00 2001 From: Rob Browning Date: Sat, 5 Oct 2024 17:18:06 -0500 Subject: Compile with -fexcess-precision=standard for i[3456]86 when we can * configure.ac: when -fexcess-precision=standard is available and we're building for i[3456]86, use it. This fixes floating point precision problems caused by x87 (80-bit) floating point, and detected by numbers.test. Closes: 43262 Origin: upstream, commit 9b1effb58579821ffa9357df808d5264e45fb30c --- configure.ac | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/configure.ac b/configure.ac index dc915ebaf..32cf48940 100644 --- a/configure.ac +++ b/configure.ac @@ -61,6 +61,30 @@ AC_PROG_INSTALL AC_PROG_CC gl_EARLY +AC_MSG_CHECKING([whether the compiler supports -fexcess-precision=standard]) +old_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS -fexcess-precision=standard" +fexcess_precision='' +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([int foo;], [])], [fexcess_precision=1]]) +CFLAGS="$old_CFLAGS" +if test -n "$fexcess_precision"; then + AC_MSG_RESULT([yes]) +else + AC_MSG_RESULT([no]) +fi +AC_MSG_CHECKING([whether we want -fexcess-precision=standard for $target_cpu]) +case "$target_cpu" in + i[[3456]]86) + AC_MSG_RESULT([yes]) + if test -n "$fexcess_precision"; then + CFLAGS="$CFLAGS -fexcess-precision=standard" + else + AC_MSG_WARN([floating-point precision may exceed C99 rules]) + fi + ;; + *) AC_MSG_RESULT([no]) ;; +esac + AC_MSG_CHECKING([whether the compiler supports -flto]) old_CFLAGS="$CFLAGS" LTO_CFLAGS="-flto"