[Bug target/25864] Enable IBM long double format in 32-bit PowerPC Linux
--- Comment #18 from pinskia at gcc dot gnu dot org 2006-10-21 21:19 --- I think we can declare this as fixed and open a new bug about 128bit long double and soft fp. -- pinskia at gcc dot gnu dot org changed: What|Removed |Added Status|NEW |RESOLVED Resolution||FIXED http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25864
[Bug target/25864] Enable IBM long double format in 32-bit PowerPC Linux
--- Comment #19 from pinskia at gcc dot gnu dot org 2006-10-21 21:24 --- (In reply to comment #18) I think we can declare this as fixed and open a new bug about 128bit long double and soft fp. And the new bug is PR 29541. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25864
[Bug target/25864] Enable IBM long double format in 32-bit PowerPC Linux
--- Comment #17 from pluto at agmk dot net 2006-06-29 18:33 --- PR28150 seems to be related. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25864
[Bug target/25864] Enable IBM long double format in 32-bit PowerPC Linux
--- Comment #15 from jakub at gcc dot gnu dot org 2006-02-14 14:18 --- Subject: Bug 25864 Author: jakub Date: Tue Feb 14 14:17:59 2006 New Revision: 110967 URL: http://gcc.gnu.org/viewcvs?root=gccview=revrev=110967 Log: 2006-02-07 Jakub Jelinek [EMAIL PROTECTED] Benjamin Kosnik [EMAIL PROTECTED] PR target/25864 * configure.ac (_GLIBCXX_LONG_DOUBLE_COMPAT): New check. If true, set also port_specific_symbol_files and create as_symver_specs. (GLIBCXX_LDBL_COMPAT): New GLIBCXX_CONDITIONAL. * configure: Rebuilt. * config.h.in: Rebuilt. * config/os/gnu-linux/ldbl-extra.ver: New file. * config/linker-map.gnu: Make sure no __float128 symbols are exported. * include/bits/c++config (_GLIBCXX_LONG_DOUBLE_COMPAT, _GLIBCXX_LDBL_NAMESPACE, _GLIBCXX_BEGIN_LDBL_NAMESPACE, _GLIBCXX_END_LDBL_NAMESPACE): Define. * include/bits/localefwd.h: Use them to conditionally scope facets. * include/bits/locale_facets.h: Surround std::{money,num}_{get,put} with _GLIBCXX_BEGIN_LDBL_NAMESPACE and _GLIBCXX_END_LDBL_NAMESPACE. [_GLIBCXX_LONG_DOUBLE_COMPAT] (std::money_get): Add __do_get method. [_GLIBCXX_LONG_DOUBLE_COMPAT] (std::money_put): Add __do_put method. [_GLIBCXX_LONG_DOUBLE_COMPAT] (std::num_get): Add __do_get method. [_GLIBCXX_LONG_DOUBLE_COMPAT] (std::num_put): Add __do_put method. * include/bits/locale_facets.tcc: Surround std::{money,num}_{get,put} with _GLIBCXX_BEGIN_LDBL_NAMESPACE and _GLIBCXX_END_LDBL_NAMESPACE. (std::money_get::__do_get, std::money_put::__do_put, std::num_get::__do_get, std::num_put::__do_put): New specializations. * include/Makefile.am: Conditionally define _GLIBCXX_LONG_DOUBLE_COMPAT in c++config. * include/Makefile.in: Regenerate. * src/locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT] (_GLIBCXX_LOC_ID, _GLIBCXX_SYNC_ID): Define, use them. * src/compatibility-ldbl.cc: New file. * src/complex_io.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Add compatibility symbols. * src/limits.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise. * src/locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise. * src/locale-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise. * src/locale-misc-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise. * src/istream-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise. * src/ostream-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise. * src/locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise. * src/wlocale-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise. * src/compatibility.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise. * config/locale/generic/c_locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise. * config/locale/gnu/c_locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise. * src/Makefile.am (libstdc++-symbol.ver): Append instead of insert in the middle if port specific symbol file requests it. (ldbl_compat_sources): New variable. (sources): Use it. (compatibility-ldbl.lo, compatibility-ldbl.o): New rules. * src/Makefile.in: Rebuilt. * testsuite/testsuite_abi.cc: Recognize GLIBCXX_LDBL_3.4, GLIBCXX_LDBL_3.4.7, CXXABI_LDBL_1.3. Added: branches/redhat/gcc-4_1-branch/libstdc++-v3/config/os/gnu-linux/ldbl-extra.ver branches/redhat/gcc-4_1-branch/libstdc++-v3/src/compatibility-ldbl.cc Modified: branches/redhat/gcc-4_1-branch/libstdc++-v3/ChangeLog branches/redhat/gcc-4_1-branch/libstdc++-v3/config.h.in branches/redhat/gcc-4_1-branch/libstdc++-v3/config/linker-map.gnu branches/redhat/gcc-4_1-branch/libstdc++-v3/config/locale/generic/c_locale.cc branches/redhat/gcc-4_1-branch/libstdc++-v3/config/locale/gnu/c_locale.cc branches/redhat/gcc-4_1-branch/libstdc++-v3/configure branches/redhat/gcc-4_1-branch/libstdc++-v3/configure.ac branches/redhat/gcc-4_1-branch/libstdc++-v3/include/Makefile.am branches/redhat/gcc-4_1-branch/libstdc++-v3/include/Makefile.in branches/redhat/gcc-4_1-branch/libstdc++-v3/include/bits/c++config branches/redhat/gcc-4_1-branch/libstdc++-v3/include/bits/locale_facets.h branches/redhat/gcc-4_1-branch/libstdc++-v3/include/bits/locale_facets.tcc branches/redhat/gcc-4_1-branch/libstdc++-v3/include/bits/localefwd.h branches/redhat/gcc-4_1-branch/libstdc++-v3/src/Makefile.am branches/redhat/gcc-4_1-branch/libstdc++-v3/src/Makefile.in branches/redhat/gcc-4_1-branch/libstdc++-v3/src/compatibility.cc branches/redhat/gcc-4_1-branch/libstdc++-v3/src/complex_io.cc branches/redhat/gcc-4_1-branch/libstdc++-v3/src/istream-inst.cc branches/redhat/gcc-4_1-branch/libstdc++-v3/src/limits.cc branches/redhat/gcc-4_1-branch/libstdc++-v3/src/locale-inst.cc
[Bug target/25864] Enable IBM long double format in 32-bit PowerPC Linux
--- Comment #16 from jakub at gcc dot gnu dot org 2006-02-14 14:23 --- Subject: Bug 25864 Author: jakub Date: Tue Feb 14 14:22:58 2006 New Revision: 110969 URL: http://gcc.gnu.org/viewcvs?root=gccview=revrev=110969 Log: 2006-02-14 Jakub Jelinek [EMAIL PROTECTED] Aldy Hernandez [EMAIL PROTECTED] PR target/25864 * configure.ac: Add --with{out}-long-double-128 configure option. (TARGET_DEFAULT_LONG_DOUBLE_128): New test. * configure: Rebuilt. * config.in: Rebuilt. * doc/install.texi (Options specification): Document --with-long-double-128. * config.gcc (sparc-*-linux*): Add sparc/t-linux to tmake_file. (sparc64-*-linux*): Likewise. * config/sparc/t-linux64 (SHLIB_MAPFILES): Removed. * config/sparc/t-linux: New file. * config/sparc/libgcc-sparc-glibc.ver (__fixtfdi, __fixunstfdi, __floatditf): Export at GCC_LDBL_3.0 if -m32 -mlong-double-128. (__divtc3, __multc3, __powitf2): Export at GCC_LDBL_4.0.0 if -m32 -mlong-double-128. * config.gcc (alpha*-*-linux*): Add alpha/t-linux to tmake_file. * config/alpha/t-linux: New file. * config/alpha/libgcc-alpha-ldbl.ver: New file. * config/sparc/linux.h (TARGET_OS_CPP_BUILTINS): Define __LONG_DOUBLE_128__ if TARGET_LONG_DOUBLE_128. (CPP_SUBTARGET_SPEC): Don't add -D__LONG_DOUBLE_128__ here. * config/sparc/linux64.h (TARGET_OS_CPP_BUILTINS): Define __LONG_DOUBLE_128__ if TARGET_LONG_DOUBLE_128 and TARGET_ARCH32. (CPP_ARCH32_SPEC): Remove. * config/s390/s390.c (override_options): Handle TARGET_DEFAULT_LONG_DOUBLE_128. * config/alpha/alpha.c (override_options): Handle TARGET_DEFAULT_LONG_DOUBLE_128. * config/sparc/sparc.c (sparc_override_options): Handle TARGET_DEFAULT_LONG_DOUBLE_128. * config/rs6000/linux.h [TARGET_DEFAULT_LONG_DOUBLE_128] (RS6000_DEFAULT_LONG_DOUBLE_SIZE): Define to 128. * config/rs6000/linux64.h [TARGET_DEFAULT_LONG_DOUBLE_128] (RS6000_DEFAULT_LONG_DOUBLE_SIZE): Define to 128. Added: branches/redhat/gcc-4_1-branch/gcc/config/alpha/libgcc-alpha-ldbl.ver branches/redhat/gcc-4_1-branch/gcc/config/alpha/t-linux branches/redhat/gcc-4_1-branch/gcc/config/sparc/t-linux Modified: branches/redhat/gcc-4_1-branch/gcc/ChangeLog branches/redhat/gcc-4_1-branch/gcc/config.gcc branches/redhat/gcc-4_1-branch/gcc/config.in branches/redhat/gcc-4_1-branch/gcc/config/alpha/alpha.c branches/redhat/gcc-4_1-branch/gcc/config/rs6000/linux.h branches/redhat/gcc-4_1-branch/gcc/config/rs6000/linux64.h branches/redhat/gcc-4_1-branch/gcc/config/s390/s390.c branches/redhat/gcc-4_1-branch/gcc/config/sparc/libgcc-sparc-glibc.ver branches/redhat/gcc-4_1-branch/gcc/config/sparc/linux.h branches/redhat/gcc-4_1-branch/gcc/config/sparc/linux64.h branches/redhat/gcc-4_1-branch/gcc/config/sparc/sparc.c branches/redhat/gcc-4_1-branch/gcc/config/sparc/t-linux64 branches/redhat/gcc-4_1-branch/gcc/configure branches/redhat/gcc-4_1-branch/gcc/configure.ac branches/redhat/gcc-4_1-branch/gcc/doc/install.texi -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25864
[Bug target/25864] Enable IBM long double format in 32-bit PowerPC Linux
--- Comment #11 from jakub at gcc dot gnu dot org 2006-02-11 08:38 --- Subject: Bug 25864 Author: jakub Date: Sat Feb 11 08:38:51 2006 New Revision: 110872 URL: http://gcc.gnu.org/viewcvs?root=gccview=revrev=110872 Log: PR target/25864 Backport from mainline 2006-02-06 Aldy Hernandez [EMAIL PROTECTED] * config/s390/s390.c (TARGET_MANGLE_FUNDAMENTAL_TYPE): Define. (s390_mangle_fundamental_type): New. * config/s390/linux.h (TARGET_ALTERNATE_LONG_DOUBLE_MANGLING): Define. * config/alpha/alpha.c (TARGET_MANGLE_FUNDAMENTAL_TYPE): Define. (alpha_mangle_fundamental_type): New. * config/alpha/linux.h (TARGET_ALTERNATE_LONG_DOUBLE_MANGLING): Define. * config/sparc/linux.h (TARGET_ALTERNATE_LONG_DOUBLE_MANGLING): Define. * config/sparc/linux64.h (TARGET_ALTERNATE_LONG_DOUBLE_MANGLING): Define. * config/sparc/sparc.c (TARGET_MANGLE_FUNDAMENTAL_TYPE): Define. (sparc_mangle_fundamental_type): New. Modified: branches/gcc-4_1-branch/gcc/ChangeLog branches/gcc-4_1-branch/gcc/config/alpha/alpha.c branches/gcc-4_1-branch/gcc/config/alpha/linux.h branches/gcc-4_1-branch/gcc/config/s390/linux.h branches/gcc-4_1-branch/gcc/config/s390/s390.c branches/gcc-4_1-branch/gcc/config/sparc/linux.h branches/gcc-4_1-branch/gcc/config/sparc/linux64.h branches/gcc-4_1-branch/gcc/config/sparc/sparc.c -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25864
[Bug target/25864] Enable IBM long double format in 32-bit PowerPC Linux
--- Comment #12 from jakub at gcc dot gnu dot org 2006-02-11 08:44 --- I think the agreement is that the currently committed patches to gcc-4_1-branch is all we want on that branch. GCC 4.1 will be able to build GLIBC 2.4 on all architectures, for code not using libstdc++-v3 at all will support the optional -mlong-double-128 compilation, but will never default to -mlong-double-128. -- jakub at gcc dot gnu dot org changed: What|Removed |Added Target Milestone|4.1.0 |4.2.0 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25864
[Bug target/25864] Enable IBM long double format in 32-bit PowerPC Linux
--- Comment #13 from jakub at gcc dot gnu dot org 2006-02-11 08:47 --- Created an attachment (id=10821) -- (http://gcc.gnu.org/bugzilla/attachment.cgi?id=10821action=view) gcc41-ldbl-default-libstdc++.patch Just for completeness, I'm attaching backport of the libstdc++-v3 changes that are on the trunk. This will be eventually on redhat/gcc-4_1-branch and if there is sufficient interest, we could try a separate branch of gcc-4_1-branch that would contain just the long double changes. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25864
[Bug target/25864] Enable IBM long double format in 32-bit PowerPC Linux
--- Comment #14 from jakub at gcc dot gnu dot org 2006-02-11 08:49 --- Created an attachment (id=10822) -- (http://gcc.gnu.org/bugzilla/attachment.cgi?id=10822action=view) gcc41-ldbl-default.patch And this patch to enable long double by default when configured with --with-long-double-128 or against glibc 2.4+. Parts of this patch are already on the trunk, parts are just approved, but waiting for approval of the configure bits. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25864
[Bug target/25864] Enable IBM long double format in 32-bit PowerPC Linux
--- Comment #10 from jakub at gcc dot gnu dot org 2006-02-10 20:58 --- Subject: Bug 25864 Author: jakub Date: Fri Feb 10 20:58:33 2006 New Revision: 110851 URL: http://gcc.gnu.org/viewcvs?root=gccview=revrev=110851 Log: PR target/25864 Backport from mainline 2006-02-04 David Edelsohn [EMAIL PROTECTED] Jakub Jelinek [EMAIL PROTECTED] * config/rs6000/rs6000.c (rs6000_mangle_fundamental_type): Mangle IBM extended float format long double as g on powerpc*-linux. 2006-02-01 Jakub Jelinek [EMAIL PROTECTED] * config/rs6000/sysv4.h (SUBTARGET_OVERRIDE_OPTIONS): For -msoft-float -mlong-double-128 only issue a warning, but don't swich to DFmode long double. 2006-01-28 David Edelsohn [EMAIL PROTECTED] * config/rs6000/aix43.h (SUBTARGET_OVERRIDE_OPTIONS): -msoft-float and -mlong-double-128 are incompatible. * config/rs6000/aix52.h (SUBTARGET_OVERRIDE_OPTIONS): Same. * config/rs6000/t-aix43 (LIB2FUNCS_EXTRA): Add ppc64-fp.c. (TARGET_LIBGCC2_CFLAGS): Define. * config/rs6000/t-aix52 (LIB2FUNCS_EXTRA): Same. (TARGET_LIBGCC2_CFLAGS): Same. * config/rs6000/ppc64-fp.c: Compile for 64-bit AIX. 2006-01-27 Jakub Jelinek [EMAIL PROTECTED] * libgcc-std.ver: Add GCC_4.1.0 symbol version. * config/rs6000/t-linux64 (TARGET_LIBGCC2_CFLAGS): Only append -mno-minimal-toc to previous content. (bispecs): Remove goal. * config/rs6000/ppc64-fp.c: Define TMODES before including fp-bit.h. * config/rs6000/darwin-ldouble.c: Don't provide [EMAIL PROTECTED] compatibility aliases on powerpc-*-*gnu*. * config/rs6000/libgcc-ppc-glibc.ver: New file. * config/rs6000/t-ppccomm (SHLIB_MAPFILES): Append libgcc-ppc-glibc.ver on powerpc*-*-*gnu*. (TARGET_LIBGCC2_CFLAGS): Append -specs=ldblspecs. (ldblspecs): New goal. * config/rs6000/t-linux64 (SHLIB_MAPFILES): Removed. * mklibgcc.in: If $TPBIT is empty, don't compile _sf_to_tf and _df_to_tf. * config/fp-bit.h (TMODES): Don't define if none of TFLOAT, L_sf_to_tf or L_df_to_tf is defined. 2006-01-27 David Edelsohn [EMAIL PROTECTED] Alan Modra [EMAIL PROTECTED] * config/rs6000/linux.h (POWERPC_LINUX): Define. * config/rs6000/linux64.h (POWERPC_LINUX): Define. * config/rs6000/darwin-ldouble.c: Build on 32-bit PowerPC. * config/rs6000/darwin.h (TARGET_IEEEQUAD): Define to zero. * config/rs6000/aix.h (TARGET_IEEEQUAD): Define to zero. * config/rs6000/rs6000.c (rs6000_ieeequad): New variable. (rs6000_override_options): Initialize rs6000_ieeequad. Initialize TFmode format to ibm_extended_format if not TARGET_IEEEQUAD. (rs6000_handle_option): Accept -mabi= ibmlongdouble and ieeelongdouble. (rs6000_emit_move): Move !TARGET_IEEEQUAD as two parts. (rs6000_return_in_memory): Only return IEEEQUAD in memory. (function_arg_advance): IBM long double passed in two FPRs, not split. (function_arg): IBM long double passed in FPRs. (rs6000_pass_by_reference): Only IEEEQUAD passed by reference. (rs6000_gimplify_va_arg): IBM long double passed in two FPRs. Only multireg GPR aligned. (rs6000_init_libfuncs): Enable IBM long double functions if not IEEEQUAD. (rs6000_generate_compare): Use IBM long double compare if not TARGET_IEEEQUAD. * config/rs6000/rs6000.h (rs6000_ieeequad): Declare. (TARGET_IEEEQUAD): Define. (CANNOT_CHANGE_MODE_CLASS): Any mode larger than doubleword if not TARGET_IEEEQUAD. * config/rs6000/rs6000.md: Enable TFmode patterns if !TARGET_IEEEQUAD. * config/rs6000/t-ppccomm (LIB2FUNCS_EXTRA): Add darwin-ldouble.c. * config/rs6000/svr4.h (SUBTARGET_OVERRIDE_OPTIONS): -msoft-float and -mlong-double-128 are incompatible. * doc/invoke.texi (-mabi): Collect options together. Add ibmlongdouble and ieeelongdouble. Added: branches/gcc-4_1-branch/gcc/config/rs6000/libgcc-ppc-glibc.ver Modified: branches/gcc-4_1-branch/gcc/ChangeLog branches/gcc-4_1-branch/gcc/config/fp-bit.h branches/gcc-4_1-branch/gcc/config/rs6000/aix.h branches/gcc-4_1-branch/gcc/config/rs6000/aix43.h branches/gcc-4_1-branch/gcc/config/rs6000/aix52.h branches/gcc-4_1-branch/gcc/config/rs6000/darwin-ldouble.c branches/gcc-4_1-branch/gcc/config/rs6000/darwin.h branches/gcc-4_1-branch/gcc/config/rs6000/linux.h branches/gcc-4_1-branch/gcc/config/rs6000/linux64.h branches/gcc-4_1-branch/gcc/config/rs6000/ppc64-fp.c branches/gcc-4_1-branch/gcc/config/rs6000/rs6000.c branches/gcc-4_1-branch/gcc/config/rs6000/rs6000.h branches/gcc-4_1-branch/gcc/config/rs6000/rs6000.md
[Bug target/25864] Enable IBM long double format in 32-bit PowerPC Linux
--- Comment #8 from krebbel at gcc dot gnu dot org 2006-02-03 07:44 --- Subject: Bug 25864 Author: krebbel Date: Fri Feb 3 07:44:12 2006 New Revision: 110538 URL: http://gcc.gnu.org/viewcvs?root=gccview=revrev=110538 Log: 2006-02-03 Andreas Krebbel [EMAIL PROTECTED] Ulrich Weigand [EMAIL PROTECTED] PR target/25864 * config/s390/2084.md (x_fsimptf, x_fmultf, x_fdivtf, x_floadtf, x_ftrunctf, x_ftruncdf): New insn reservations. * config/s390/fixdfdi.h (__fixunstfdi, __fixtfdi): New functions. * config/s390/s390.c (struct processor_costs): Add mxbr, sqxbr, dxbr and dxr fields. (z900_cost, z990_cost, z9_109_cost): Values for the new fields added. (s390_rtx_costs): Use the new fields to calculate rtx costs. (s390_secondary_input_reload_class, s390_secondary_output_reload_class): Define secondary reloads for TFmode moves. (constant_modes): Add TFmode. (NR_C_MODES): Set to 8. * config/s390/s390.h (TARGET_CPU_CPP_BUILTINS): Add __LONG_DOUBLE_128__ builtin define. (LONG_DOUBLE_TYPE_SIZE): Set to 128 or 64. (LIBGCC2_LONG_DOUBLE_TYPE_SIZE, WIDEST_HARDWARE_FP_SIZE): Define. (HARD_REGNO_NREGS, HARD_REGNO_MODE_OK, CLASS_MAX_NREGS, CANNOT_CHANGE_MODE_CLASS): Consider TFmode. * config/s390/s390.md (type attribute): Add fsimptf, floadtf, fmultf, fdivtf, fsqrttf, ftrunctf, ftruncdf as possible values. (FPR mode macro): Add TFmode. (DSF mode macro): New. (de, dee mode attributes): Removed. (xde, xdee, RRe, RXe, Rf mode attributes): New. (*cmpmode_ccs_0, *cmpmode_ccs_0_ibm, *cmpmode_ccs, *cmpmode_ccs_ibm, fix_truncFPR:modeGPR:mode2_ieee, floatdimode2, floatsimode2_ieee, *addmode3, *addmode3_cc, *addmode3_cconly, *addmode3_ibm, *submode3, *submode3_cc, *submode3_cconly, *submode3_ibm, *mulmode3_ibm, *fmaddmode, *fmsubmode, *divmode3, *divmode3_ibm, *negmode2_cc, *negmode2_cconly, *negmode2, *negmode2_ibm, *absmode2_cc, *absmode2_cconly, *absmode2, *absmode2_ibm, *negabsmode2_cc, *negabsmode2_cconly, *negabsmode2, sqrtmode2): Changed de to xde. R constraint replaced by Rf. (*mulmode3): Changed dee to xdee. R constraint replaced by Rf. (fix_truncFPR:modedi2): 'FPR:' removed. (*fmaddmode, *fmsubmode): FPR mode replaced by DSF. (*movtf_64, *movtf_31): New insn definitions followed by 5 splitters. (movtf, reload_outtf, reload_intf, trunctfdf2, trunctfsf2, extenddftf2, extendsftf2): New expanders. (*trunctfdf2_ieee, *trunctfdf2_ibm, *trunctfsf2_ieee, *trunctfsf2_ibm, *extenddftf2_ieee, *extenddftf2_ibm, *extendsftf2_ieee, *extendsftf2_ibm): New insn patterns. * config/s390/s390.opt (mlong-double-128, mlong-double-64): New options. * config/s390/t-crtstuff (TARGET_LIBGCC2_CFLAGS): Macro defined. * config/s390/libgcc-glibc.ver (__divtc3, __multc3, __powitf2, __fixtfti, __fixunstfti, __floattitf, __fixtfdi, __fixunstfdi, __floatditf): Add a GCC_4.1.0 symbol version tag. * doc/invoke.texi (-mlong-double-128, -mlong-double-64): Document the new options. Modified: branches/gcc-4_1-branch/gcc/ChangeLog branches/gcc-4_1-branch/gcc/config/s390/2084.md branches/gcc-4_1-branch/gcc/config/s390/fixdfdi.h branches/gcc-4_1-branch/gcc/config/s390/libgcc-glibc.ver branches/gcc-4_1-branch/gcc/config/s390/s390.c branches/gcc-4_1-branch/gcc/config/s390/s390.h branches/gcc-4_1-branch/gcc/config/s390/s390.md branches/gcc-4_1-branch/gcc/config/s390/s390.opt branches/gcc-4_1-branch/gcc/config/s390/t-crtstuff branches/gcc-4_1-branch/gcc/doc/invoke.texi -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25864
[Bug target/25864] Enable IBM long double format in 32-bit PowerPC Linux
--- Comment #9 from krebbel at gcc dot gnu dot org 2006-02-03 07:53 --- Subject: Bug 25864 Author: krebbel Date: Fri Feb 3 07:52:57 2006 New Revision: 110539 URL: http://gcc.gnu.org/viewcvs?root=gccview=revrev=110539 Log: 2006-02-03 Andreas Krebbel [EMAIL PROTECTED] Ulrich Weigand [EMAIL PROTECTED] PR target/25864 * config/s390/2084.md (x_fsimptf, x_fmultf, x_fdivtf, x_floadtf, x_ftrunctf, x_ftruncdf): New insn reservations. * config/s390/fixdfdi.h (__fixunstfdi, __fixtfdi): New functions. * config/s390/s390.c (struct processor_costs): Add mxbr, sqxbr, dxbr and dxr fields. (z900_cost, z990_cost, z9_109_cost): Values for the new fields added. (s390_rtx_costs): Use the new fields to calculate rtx costs. (s390_secondary_input_reload_class, s390_secondary_output_reload_class): Define secondary reloads for TFmode moves. (constant_modes): Add TFmode. (NR_C_MODES): Set to 8. * config/s390/s390.h (TARGET_CPU_CPP_BUILTINS): Add __LONG_DOUBLE_128__ builtin define. (LONG_DOUBLE_TYPE_SIZE): Set to 128 or 64. (LIBGCC2_LONG_DOUBLE_TYPE_SIZE, WIDEST_HARDWARE_FP_SIZE): Define. (HARD_REGNO_NREGS, HARD_REGNO_MODE_OK, CLASS_MAX_NREGS, CANNOT_CHANGE_MODE_CLASS): Consider TFmode. * config/s390/s390.md (type attribute): Add fsimptf, floadtf, fmultf, fdivtf, fsqrttf, ftrunctf, ftruncdf as possible values. (FPR mode macro): Add TFmode. (DSF mode macro): New. (de, dee mode attributes): Removed. (xde, xdee, RRe, RXe, Rf mode attributes): New. (*cmpmode_ccs_0, *cmpmode_ccs_0_ibm, *cmpmode_ccs, *cmpmode_ccs_ibm, fix_truncFPR:modeGPR:mode2_ieee, floatdimode2, floatsimode2_ieee, *addmode3, *addmode3_cc, *addmode3_cconly, *addmode3_ibm, *submode3, *submode3_cc, *submode3_cconly, *submode3_ibm, *mulmode3_ibm, *fmaddmode, *fmsubmode, *divmode3, *divmode3_ibm, *negmode2_cc, *negmode2_cconly, *negmode2, *negmode2_ibm, *absmode2_cc, *absmode2_cconly, *absmode2, *absmode2_ibm, *negabsmode2_cc, *negabsmode2_cconly, *negabsmode2, sqrtmode2): Changed de to xde. R constraint replaced by Rf. (*mulmode3): Changed dee to xdee. R constraint replaced by Rf. (fix_truncFPR:modedi2): 'FPR:' removed. (*fmaddmode, *fmsubmode): FPR mode replaced by DSF. (*movtf_64, *movtf_31): New insn definitions followed by 5 splitters. (movtf, reload_outtf, reload_intf, trunctfdf2, trunctfsf2, extenddftf2, extendsftf2): New expanders. (*trunctfdf2_ieee, *trunctfdf2_ibm, *trunctfsf2_ieee, *trunctfsf2_ibm, *extenddftf2_ieee, *extenddftf2_ibm, *extendsftf2_ieee, *extendsftf2_ibm): New insn patterns. * config/s390/s390.opt (mlong-double-128, mlong-double-64): New options. * config/s390/t-crtstuff (TARGET_LIBGCC2_CFLAGS): Macro defined. * config/s390/libgcc-glibc.ver (__divtc3, __multc3, __powitf2, __fixtfti, __fixunstfti, __floattitf, __fixtfdi, __fixunstfdi, __floatditf): Add a GCC_4.1.0 symbol version tag. * doc/invoke.texi (-mlong-double-128, -mlong-double-64): Document the new options. Modified: trunk/gcc/ChangeLog trunk/gcc/config/s390/2084.md trunk/gcc/config/s390/fixdfdi.h trunk/gcc/config/s390/libgcc-glibc.ver trunk/gcc/config/s390/s390.c trunk/gcc/config/s390/s390.h trunk/gcc/config/s390/s390.md trunk/gcc/config/s390/s390.opt trunk/gcc/config/s390/t-crtstuff trunk/gcc/doc/invoke.texi -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25864
[Bug target/25864] Enable IBM long double format in 32-bit PowerPC Linux
--- Comment #7 from jakub at gcc dot gnu dot org 2006-01-27 19:59 --- Subject: Bug 25864 Author: jakub Date: Fri Jan 27 19:59:49 2006 New Revision: 110303 URL: http://gcc.gnu.org/viewcvs?root=gccview=revrev=110303 Log: 2006-01-27 Jakub Jelinek [EMAIL PROTECTED] PR target/25864 * libgcc-std.ver: Add GCC_4.1.0 symbol version. * config/rs6000/t-linux64 (TARGET_LIBGCC2_CFLAGS): Only append -mno-minimal-toc to previous content. (bispecs): Remove goal. * config/rs6000/ppc64-fp.c: Define TMODES before including fp-bit.h. * config/rs6000/darwin-ldouble.c: Don't provide [EMAIL PROTECTED] compatibility aliases on powerpc-*-*gnu*. * config/rs6000/libgcc-ppc-glibc.ver: New file. * config/rs6000/t-ppccomm (SHLIB_MAPFILES): Append libgcc-ppc-glibc.ver on powerpc*-*-*gnu*. (TARGET_LIBGCC2_CFLAGS): Append -specs=ldblspecs. (ldblspecs): New goal. * config/rs6000/t-linux64 (SHLIB_MAPFILES): Removed. * mklibgcc.in: If $TPBIT is empty, don't compile _sf_to_tf and _df_to_tf. * config/fp-bit.h (TMODES): Don't define if none of TFLOAT, L_sf_to_tf or L_df_to_tf is defined. 2006-01-27 David Edelsohn [EMAIL PROTECTED] Alan Modra [EMAIL PROTECTED] PR target/25864 * config/rs6000/linux.h (POWERPC_LINUX): Define. * config/rs6000/linux64.h (POWERPC_LINUX): Define. * config/rs6000/darwin-ldouble.c: Build on 32-bit PowerPC. * config/rs6000/darwin.h (TARGET_IEEEQUAD): Define to zero. * config/rs6000/aix.h (TARGET_IEEEQUAD): Define to zero. * config/rs6000/rs6000.c (rs6000_ieeequad): New variable. (rs6000_override_options): Initialize rs6000_ieeequad. Initialize TFmode format to ibm_extended_format if not TARGET_IEEEQUAD. (rs6000_handle_option): Accept -mabi= ibmlongdouble and ieeelongdouble. (rs6000_emit_move): Move !TARGET_IEEEQUAD as two parts. (rs6000_return_in_memory): Only return IEEEQUAD in memory. (function_arg_advance): IBM long double passed in two FPRs, not split. (function_arg): IBM long double passed in FPRs. (rs6000_pass_by_reference): Only IEEEQUAD passed by reference. (rs6000_gimplify_va_arg): IBM long double passed in two FPRs. Only multireg GPR aligned. (rs6000_init_libfuncs): Enable IBM long double functions if not IEEEQUAD. (rs6000_generate_compare): Use IBM long double compare if not TARGET_IEEEQUAD. * config/rs6000/rs6000.h (rs6000_ieeequad): Declare. (TARGET_IEEEQUAD): Define. (CANNOT_CHANGE_MODE_CLASS): Any mode larger than doubleword if not TARGET_IEEEQUAD. * config/rs6000/rs6000.md: Enable TFmode patterns if !TARGET_IEEEQUAD. * config/rs6000/t-ppccomm (LIB2FUNCS_EXTRA): Add darwin-ldouble.c. * config/rs6000/svr4.h (SUBTARGET_OVERRIDE_OPTIONS): -msoft-float and -mlong-double-128 are incompatible. * doc/invoke.texi (-mabi): Collect options together. Add ibmlongdouble and ieeelongdouble. Added: trunk/gcc/config/rs6000/libgcc-ppc-glibc.ver Modified: trunk/gcc/ChangeLog trunk/gcc/config/fp-bit.h trunk/gcc/config/rs6000/aix.h trunk/gcc/config/rs6000/darwin-ldouble.c trunk/gcc/config/rs6000/darwin.h trunk/gcc/config/rs6000/linux.h trunk/gcc/config/rs6000/linux64.h trunk/gcc/config/rs6000/ppc64-fp.c trunk/gcc/config/rs6000/rs6000.c trunk/gcc/config/rs6000/rs6000.h trunk/gcc/config/rs6000/rs6000.md trunk/gcc/config/rs6000/sysv4.h trunk/gcc/config/rs6000/t-linux64 trunk/gcc/config/rs6000/t-ppccomm trunk/gcc/doc/invoke.texi trunk/gcc/libgcc-std.ver trunk/gcc/mklibgcc.in -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25864
[Bug target/25864] Enable IBM long double format in 32-bit PowerPC Linux
--- Comment #5 from jakub at gcc dot gnu dot org 2006-01-24 16:26 --- On the Linux architectures that use DFmode long double ATM and want to switch to some other format in glibc 2.4 (best would be if all are switching together), we primarily need GCC 4.1 to actually be able to compile glibc 2.4. That means supporting -mlong-double-128 option, which doesn't necessarily need to be the default, supporting the desired long double format with that option (glibc will support only IEEE quad, XFmode and IBM extended format) and have libgcc{.a,_s.so} provide long double entry points if needed to compile glibc (libm uses complex long double multiplication/division, usually e.g. __multc3/__divtc3 will be needed). sparc-linux (32-bit) already switched on the glibc side, but unfortunately I was testing that with GCC 3.4.x where it worked (__multc3/__divtc3 wasn't present yet), now we have a chicken-and-egg like problem there (glibc provides _Q_add/_Q_mul etc. routines but needs __multc3/__divtc3, libgcc can't be built with -mlong-double-128 without glibc 2.4 installed, as __multc3/__divtc3 etc. implementation in libgcc uses _Q_add/_Q_mul, so this would be good to solve for GCC 4.1. ppc64-linux (64-bit) is known to build the soon to be glibc 2.4 out of the box, for ppc32-linux David Edelsohn posted a patch. I'd appreciate a lot if s390{,x} in GCC 4.1 could have this level of IEEE quad support too, it will be far easier to switch all architectures at once. alpha-linux might want to switch as well, -mlong-double-128 is supported there, though probably libgcc isn't built with that. Richard, are you still planing to switch? glibc 2.4 will support both DFmode and TFmode long double through redirects in math.h, stdio.h and other headers (if -mlong-double-64) and symbol versioning. Another step is to make -mlong-double-128 the default on those architectures, if GCC configury detects glibc 2.4 (or is told via some configure option). Here the biggest problem is libstdc++, which exports some long double templates and there we don't want to switch SONAME in GCC 4.1. This can be solved via symbol versioning (like in glibc) and multilibbing libstdc++ (-mlong-double-128 multilib libstdc++.so.6 would be backwards compatible with -mlong-double-64 one, so that would be the one used at runtime, for link time we would use the respective multilib). -- jakub at gcc dot gnu dot org changed: What|Removed |Added CC||rth at gcc dot gnu dot org, ||bkoz at gcc dot gnu dot org, ||jakub at redhat dot com http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25864
[Bug target/25864] Enable IBM long double format in 32-bit PowerPC Linux
--- Comment #6 from mmitchel at gcc dot gnu dot org 2006-01-25 06:27 --- I think it's fine to change S390 for 4.1, if we change PowerPC. In fact, I think S390 is less risk than PowerPC, since it is used by fewer people. I'm watching the patches on the GCC list for PowerPC, but it looks like consensus has not yet quite been reached on how to do this for PowerPC. When there's a final patch that satisfies everyone, it would be great to attach it to this PR. Thanks, -- Mark -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25864
[Bug target/25864] Enable IBM long double format in 32-bit PowerPC Linux
--- Comment #1 from pinskia at gcc dot gnu dot org 2006-01-19 20:27 --- Confirmed. -- pinskia at gcc dot gnu dot org changed: What|Removed |Added CC||pinskia at gcc dot gnu dot ||org Status|UNCONFIRMED |NEW Ever Confirmed|0 |1 Last reconfirmed|-00-00 00:00:00 |2006-01-19 20:27:41 date|| http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25864
[Bug target/25864] Enable IBM long double format in 32-bit PowerPC Linux
--- Comment #2 from dje at gcc dot gnu dot org 2006-01-19 20:28 --- This is an enhancement request in conjunction with Glibc. -- dje at gcc dot gnu dot org changed: What|Removed |Added CC||amodra at bigpond dot net ||dot au Severity|normal |enhancement Last reconfirmed|2006-01-19 20:27:41 |2006-01-19 20:28:02 date|| Target Milestone|--- |4.1.0 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25864
[Bug target/25864] Enable IBM long double format in 32-bit PowerPC Linux
--- Comment #3 from mmitchel at gcc dot gnu dot org 2006-01-19 20:44 --- David has indicated to me that it's possible (but not certain) that the PowerPC GNU/Linux community wants this on by default in GCC 4.1. Since we'd very much like to avoid ABI changes throughout the 4.1 series, and since the GLIBC changes are blocked on getting this change into 4.1, I've marked this as P1. If we conclude that this can go in 4.1.1, or isn't necessary, etc., then we'll downgrade the priority. -- mmitchel at gcc dot gnu dot org changed: What|Removed |Added Priority|P3 |P1 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25864
[Bug target/25864] Enable IBM long double format in 32-bit PowerPC Linux
--- Comment #4 from uweigand at gcc dot gnu dot org 2006-01-19 23:19 --- FYI, the glibc folks have made a similar request w.r.t. adding 128-bit long double (IEEE quad) support for s390(x)-ibm-linux. We're currently preparing a patch -- if there's still a chance of getting this into 4.1 we'd like to join ... -- uweigand at gcc dot gnu dot org changed: What|Removed |Added CC||uweigand at gcc dot gnu dot ||org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25864