https://gcc.gnu.org/g:73a62377ae638ce85c0a40327e67b41c861fb156

commit r14-11538-g73a62377ae638ce85c0a40327e67b41c861fb156
Author: Lulu Cheng <chengl...@loongson.cn>
Date:   Mon Apr 7 10:00:27 2025 +0800

    LoongArch: Add LoongArch architecture detection to __float128 support in 
libgfortran and libquadmath [PR119408].
    
    In GCC14, LoongArch added __float128 as an alias for _Float128.
    In commit r15-8962, support for q/Q suffixes for 128-bit floating point
    numbers.  This will cause the compiler to automatically link libquadmath
    when compiling Fortran programs.  But on LoongArch `long double` is
    IEEE quad, so there is no need to implement libquadmath.
    This causes link failure.
    
            PR target/119408
    
    libgfortran/ChangeLog:
    
            * acinclude.m4: When checking for __float128 support, determine
            whether the current architecture is LoongArch.  If so, return false.
            * configure: Regenerate.
    
    libquadmath/ChangeLog:
    
            * configure.ac: When checking for __float128 support, determine
            whether the current architecture is LoongArch.  If so, return false.
            * configure: Regenerate.
    
            Sigend-off-by: Xi Ruoyao <xry...@xry111.site>
            Sigend-off-by: Jakub Jelinek <ja...@redhat.com>
    
    (cherry picked from commit 1534f0099c98ea14c08a401302b05edf2231f411)

Diff:
---
 libgfortran/acinclude.m4 | 4 ++++
 libgfortran/configure    | 8 ++++++++
 libquadmath/configure    | 8 ++++++++
 libquadmath/configure.ac | 4 ++++
 4 files changed, 24 insertions(+)

diff --git a/libgfortran/acinclude.m4 b/libgfortran/acinclude.m4
index a73207e54656..23fd621e5188 100644
--- a/libgfortran/acinclude.m4
+++ b/libgfortran/acinclude.m4
@@ -274,6 +274,10 @@ AC_DEFUN([LIBGFOR_CHECK_FLOAT128], [
   AC_CACHE_CHECK([whether we have a usable _Float128 type],
                  libgfor_cv_have_float128, [
    GCC_TRY_COMPILE_OR_LINK([
+    #ifdef __loongarch__
+    #error On LoongArch we should use long double instead; __float128 is only 
for porting existing code easier.
+    #endif
+
     _Float128 foo (_Float128 x)
     {
      _Complex _Float128 z1, z2;
diff --git a/libgfortran/configure b/libgfortran/configure
index 774dd52fc95d..16bad2924749 100755
--- a/libgfortran/configure
+++ b/libgfortran/configure
@@ -30288,6 +30288,10 @@ else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
+    #ifdef __loongarch__
+    #error On LoongArch we should use long double instead; __float128 is only 
for porting existing code easier.
+    #endif
+
     _Float128 foo (_Float128 x)
     {
      _Complex _Float128 z1, z2;
@@ -30341,6 +30345,10 @@ fi
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
+    #ifdef __loongarch__
+    #error On LoongArch we should use long double instead; __float128 is only 
for porting existing code easier.
+    #endif
+
     _Float128 foo (_Float128 x)
     {
      _Complex _Float128 z1, z2;
diff --git a/libquadmath/configure b/libquadmath/configure
index 49d70809218c..f82dd3d0d6d4 100755
--- a/libquadmath/configure
+++ b/libquadmath/configure
@@ -12843,6 +12843,10 @@ else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
+    #ifdef __loongarch__
+    #error  On LoongArch we should use long double instead; __float128 is only 
for porting existing code easier.
+    #endif
+
     #if (!defined(_ARCH_PPC)) || defined(__LONG_DOUBLE_IEEE128__)
     typedef _Complex float __attribute__((mode(TC))) __complex128;
     #else
@@ -12894,6 +12898,10 @@ fi
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
+    #ifdef __loongarch__
+    #error  On LoongArch we should use long double instead; __float128 is only 
for porting existing code easier.
+    #endif
+
     #if (!defined(_ARCH_PPC)) || defined(__LONG_DOUBLE_IEEE128__)
     typedef _Complex float __attribute__((mode(TC))) __complex128;
     #else
diff --git a/libquadmath/configure.ac b/libquadmath/configure.ac
index 349be2607c64..c64a84892191 100644
--- a/libquadmath/configure.ac
+++ b/libquadmath/configure.ac
@@ -233,6 +233,10 @@ AM_CONDITIONAL(LIBQUAD_USE_SYMVER_SUN, [test 
"x$quadmath_use_symver" = xsun])
 
 AC_CACHE_CHECK([whether __float128 is supported], [libquad_cv_have_float128],
   [GCC_TRY_COMPILE_OR_LINK([
+    #ifdef __loongarch__
+    #error  On LoongArch we should use long double instead; __float128 is only 
for porting existing code easier.
+    #endif
+
     #if (!defined(_ARCH_PPC)) || defined(__LONG_DOUBLE_IEEE128__)
     typedef _Complex float __attribute__((mode(TC))) __complex128;
     #else

Reply via email to