diff mbox series

libgfortran: Fix up LIBGFOR_CHECK_FLOAT128 [PR106137]

Message ID YrxBzaWQC/1cHvUA@tucnak
State New
Headers show
Series libgfortran: Fix up LIBGFOR_CHECK_FLOAT128 [PR106137] | expand

Commit Message

Jakub Jelinek June 29, 2022, 12:13 p.m. UTC
Hi!

My recent gfortran + libgfortran patch apparently broke (some?) aarch64
builds.  While it is desirable to use just _Float128 rather than __float128,
we only want to use it (and e.g. define HAVE_FLOAT128) on targets where
_Float128 is supported and long double isn't IEEE quad precision.
Which is targets that support __float128 type which we have been testing
for before - _Float128 is supported on those targets and on targets where
long double is IEEE quad precision.

So, the following patch restores check for whether __float128 is supported
into the LIBGFOR_CHECK_FLOAT128 check which determines whether
HAVE_FLOAT128 is defined or whether to use libquadmath, so that e.g. on
aarch64 where long double is IEEE quad we don't do that.

Tested by Tamar on aarch64 and by me on x86_64-linux, ok for trunk?

2022-06-29  Jakub Jelinek  <jakub@redhat.com>

	PR bootstrap/106137
	* acinclude.m4 (LIBGFOR_CHECK_FLOAT128): Also test for __float128.
	* configure: Regenerated.


	Jakub

Comments

Tobias Burnus June 29, 2022, 2:42 p.m. UTC | #1
On 29.06.22 14:13, Jakub Jelinek via Fortran wrote:
> My recent gfortran + libgfortran patch apparently broke (some?) aarch64
> builds.  While it is desirable to use just _Float128 rather than __float128,
> we only want to use it (and e.g. define HAVE_FLOAT128) on targets where
> _Float128 is supported and long double isn't IEEE quad precision.
> Which is targets that support __float128 type which we have been testing
> for before - _Float128 is supported on those targets and on targets where
> long double is IEEE quad precision.
>
> So, the following patch restores check for whether __float128 is supported
> into the LIBGFOR_CHECK_FLOAT128 check which determines whether
> HAVE_FLOAT128 is defined or whether to use libquadmath, so that e.g. on
> aarch64 where long double is IEEE quad we don't do that.
>
> Tested by Tamar on aarch64 and by me on x86_64-linux, ok for trunk?
> 2022-06-29  Jakub Jelinek  <jakub@redhat.com>
>
>       PR bootstrap/106137
>       * acinclude.m4 (LIBGFOR_CHECK_FLOAT128): Also test for __float128.
>       * configure: Regenerated.
>
> --- libgfortran/acinclude.m4.jj       2022-06-28 13:14:45.327799267 +0200
> +++ libgfortran/acinclude.m4  2022-06-29 11:45:19.286551469 +0200
> @@ -276,7 +276,6 @@ AC_DEFUN([LIBGFOR_CHECK_FLOAT128], [
>      GCC_TRY_COMPILE_OR_LINK([
>       _Float128 foo (_Float128 x)

...

> +    __float128 baz (__float128 x)

As now both __float128 and _Float128 is tested, can you also update:

  dnl Check whether we have a __float128 type
  AC_DEFUN([LIBGFOR_CHECK_FLOAT128], [

...
    AC_CACHE_CHECK([whether we have a usable _Float128 type],
                   libgfor_cv_have_float128, [

I note that your follow-up patch adds _Float128 to the dnl comment,
but I think __float128 should also be added to the cache output to
make clear that both _Float128/__float128 are checked.

Otherwise: LGTM.

Thanks,

Tobias

-----------------
Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstraße 201, 80634 München; Gesellschaft mit beschränkter Haftung; Geschäftsführer: Thomas Heurung, Frank Thürauf; Sitz der Gesellschaft: München; Registergericht München, HRB 106955
diff mbox series

Patch

--- libgfortran/acinclude.m4.jj	2022-06-28 13:14:45.327799267 +0200
+++ libgfortran/acinclude.m4	2022-06-29 11:45:19.286551469 +0200
@@ -276,7 +276,6 @@  AC_DEFUN([LIBGFOR_CHECK_FLOAT128], [
    GCC_TRY_COMPILE_OR_LINK([
     _Float128 foo (_Float128 x)
     {
-
      _Complex _Float128 z1, z2;
 
      z1 = x;
@@ -290,11 +289,18 @@  AC_DEFUN([LIBGFOR_CHECK_FLOAT128], [
     {
       return x * __builtin_huge_valf128 ();
     }
+
+    __float128 baz (__float128 x)
+    {
+      return x * __builtin_huge_valf128 ();
+    }
   ],[
     foo (1.2F128);
     bar (1.2F128);
+    baz (1.2F128);
     foo (1.2Q);
     bar (1.2Q);
+    baz (1.2Q);
   ],[
     libgfor_cv_have_float128=yes
   ],[
--- libgfortran/configure.jj	2022-06-28 13:14:45.331799215 +0200
+++ libgfortran/configure	2022-06-29 11:45:49.951148846 +0200
@@ -30130,7 +30130,6 @@  else
 
     _Float128 foo (_Float128 x)
     {
-
      _Complex _Float128 z1, z2;
 
      z1 = x;
@@ -30145,14 +30144,21 @@  else
       return x * __builtin_huge_valf128 ();
     }
 
+    __float128 baz (__float128 x)
+    {
+      return x * __builtin_huge_valf128 ();
+    }
+
 int
 main ()
 {
 
     foo (1.2F128);
     bar (1.2F128);
+    baz (1.2F128);
     foo (1.2Q);
     bar (1.2Q);
+    baz (1.2Q);
 
   ;
   return 0;
@@ -30177,7 +30183,6 @@  cat confdefs.h - <<_ACEOF >conftest.$ac_
 
     _Float128 foo (_Float128 x)
     {
-
      _Complex _Float128 z1, z2;
 
      z1 = x;
@@ -30192,14 +30197,21 @@  cat confdefs.h - <<_ACEOF >conftest.$ac_
       return x * __builtin_huge_valf128 ();
     }
 
+    __float128 baz (__float128 x)
+    {
+      return x * __builtin_huge_valf128 ();
+    }
+
 int
 main ()
 {
 
     foo (1.2F128);
     bar (1.2F128);
+    baz (1.2F128);
     foo (1.2Q);
     bar (1.2Q);
+    baz (1.2Q);
 
   ;
   return 0;