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