From: nsrikarrao <[email protected]>

On AIX (powerpc-ibm-aix*), IEEE 128-bit float is not enabled, meaning
rs6000/t-float128 and rs6000/t-linux are excluded from tmake_file.
Consequently, the _BitInt conversion routines from soft-fp/ and rs6000/
were never added to LIB2ADD on AIX targets.

This causes unresolved symbol link errors when running _BitInt testcases
in the GCC testsuite (e.g., bitint-123.c, bitint-28.c, and 
bitint-ibm128-to-bitint.c)
due to missing symbols like __floatbitintdf and __fixtfbitint.

Fix this by explicitly adding the soft-fp SFmode/DFmode and IBM 128-bit
double-double TFmode _BitInt conversion routines to rs6000/t-ibm-ldouble,
and exporting the corresponding symbols in libgcc-ibm-ldouble.ver.

libgcc/ChangeLog:

        * config/rs6000/t-ibm-ldouble: Add soft-fp SFmode/DFmode and
        rs6000 IBM 128-bit TFmode _BitInt conversion sources to LIB2ADD.
        * config/rs6000/libgcc-ibm-ldouble.ver: Export __floatbitintsf,
        __fixsfbitint, __floatbitintdf, __fixdfbitint, __floatbitinttf,
        and __fixtfbitint.

        === gcc Summary ===

-# of expected passes       149039
-# of unexpected failures   170
+# of expected passes       149074
+# of unexpected failures   158
 # of unexpected successes  18
 # of expected failures     1389
-# of unresolved testcases  49
+# of unresolved testcases  27
 # of unsupported tests     4915
---
 libgcc/config/rs6000/libgcc-ibm-ldouble.ver |  6 ++++++
 libgcc/config/rs6000/t-ibm-ldouble          | 15 +++++++++++++++
 2 files changed, 21 insertions(+)

diff --git a/libgcc/config/rs6000/libgcc-ibm-ldouble.ver 
b/libgcc/config/rs6000/libgcc-ibm-ldouble.ver
index b27b4b49249..37a77c2163f 100644
--- a/libgcc/config/rs6000/libgcc-ibm-ldouble.ver
+++ b/libgcc/config/rs6000/libgcc-ibm-ldouble.ver
@@ -4,4 +4,10 @@ GCC_3.4.4 {
   __gcc_qsub
   __gcc_qmul
   __gcc_qdiv
+  __floatbitintsf
+  __fixsfbitint
+  __floatbitintdf
+  __fixdfbitint
+  __floatbitinttf
+  __fixtfbitint
 }
diff --git a/libgcc/config/rs6000/t-ibm-ldouble 
b/libgcc/config/rs6000/t-ibm-ldouble
index b13278498ec..d75e453f0cb 100644
--- a/libgcc/config/rs6000/t-ibm-ldouble
+++ b/libgcc/config/rs6000/t-ibm-ldouble
@@ -1,6 +1,21 @@
 # GCC 128-bit long double support routines.
 LIB2ADD += $(srcdir)/config/rs6000/ibm-ldouble.c
 
+# Binary SFmode/DFmode _BitInt conversions from soft-fp/
+rs6000_aix_bitint_bin_funcs = fixsfbitint floatbitintsf \
+                             fixdfbitint floatbitintdf
+LIB2ADD += $(addprefix $(srcdir)/soft-fp/, \
+            $(addsuffix .c,$(rs6000_aix_bitint_bin_funcs)))
+
+# IBM extended double (__ibm128) <-> _BitInt conversions
+ibm128_bitint_funcs = floatbitinttf-ibm128 fixtfbitint-ibm128
+LIB2ADD += $(addprefix $(srcdir)/config/rs6000/, \
+            $(addsuffix .c,$(ibm128_bitint_funcs)))
+
+ibm128_bitint_objs = $(addsuffix $(objext),$(ibm128_bitint_funcs)) \
+                    $(addsuffix _s$(objext),$(ibm128_bitint_funcs))
+$(ibm128_bitint_objs) : INTERNAL_CFLAGS += -Wno-psabi -I$(srcdir)/soft-fp 
-I$(srcdir)/config/rs6000
+
 HOST_LIBGCC2_CFLAGS += -mlong-double-128
 
 SHLIB_MAPFILES += $(srcdir)/config/rs6000/libgcc-ibm-ldouble.ver
-- 
2.51.2

Reply via email to