re PR target/39048 (gcc 4.4.0 20090131 - Extra underscore hides libgcc's soft-fp...
authorRainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
Wed, 31 Mar 2010 09:03:29 +0000 (09:03 +0000)
committerRainer Orth <ro@gcc.gnu.org>
Wed, 31 Mar 2010 09:03:29 +0000 (09:03 +0000)
gcc:
PR target/39048
* config.gcc (i[34567]86-*-solaris2*): Add i386/t-fprules-softfp
and soft-fp/t-softfp to tmake_file.
* config/i386/sol2.h (LIBGCC2_HAS_TF_MODE): Redefine.
(LIBGCC2_TF_CEXT): Define.
(TF_SIZE): Define.

libgcc:
PR target/39048
* config.host (i[34567]86-*-solaris2): Handle 32-bit Solaris 2/x86
like other remaining 32-bit x86 OSes.
* config/i386/32/sfp-machine.h (FP_HANDLE_EXCEPTIONS): Support Sun
assembler syntax.
* config/i386/libgcc-sol2.ver: New file.
* config/i386/t-sol2 (SHLIB_MAPFILES): Add it.

Co-Authored-By: Uros Bizjak <ubizjak@gmail.com>
From-SVN: r157854

gcc/config.gcc
gcc/config/i386/sol2.h
libgcc/ChangeLog
libgcc/config.host
libgcc/config/i386/32/sfp-machine.h
libgcc/config/i386/libgcc-sol2.ver [new file with mode: 0644]
libgcc/config/i386/t-sol2

index e6b2e5f..b0ed012 100644 (file)
@@ -3402,6 +3402,9 @@ case ${target} in
        i[34567]86-*-linux* | x86_64-*-linux* | i[34567]86-*-kfreebsd*-gnu | x86_64-*-kfreebsd*-gnu)
                tmake_file="${tmake_file} i386/t-fprules-softfp soft-fp/t-softfp i386/t-linux"
                ;;
+       i[34567]86-*-solaris2*)
+               tmake_file="${tmake_file} i386/t-fprules-softfp soft-fp/t-softfp"
+               ;;
        i[34567]86-*-cygwin* | i[34567]86-*-mingw* | x86_64-*-mingw*)
                tmake_file="${tmake_file} i386/t-fprules-softfp soft-fp/t-softfp"
                ;;
index 70c8a8f..777fc2c 100644 (file)
@@ -165,4 +165,10 @@ along with GCC; see the file COPYING3.  If not see
 #define USE_HIDDEN_LINKONCE 0
 #endif
 
+/* Put all *tf routines in libgcc.  */
+#undef LIBGCC2_HAS_TF_MODE
+#define LIBGCC2_HAS_TF_MODE 1
+#define LIBGCC2_TF_CEXT q
+#define TF_SIZE 113
+
 #define MD_UNWIND_SUPPORT "config/i386/sol2-unwind.h"
index 677753e..b2fe535 100644 (file)
@@ -1,3 +1,14 @@
+2010-03-31  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+           Uros Bizjak <ubizjak@gmail.com>
+
+       PR target/39048
+       * config.host (i[34567]86-*-solaris2): Handle 32-bit Solaris 2/x86
+       like other remaining 32-bit x86 OSes.
+       * config/i386/32/sfp-machine.h (FP_HANDLE_EXCEPTIONS): Support Sun
+       assembler syntax.
+       * config/i386/libgcc-sol2.ver: New file.
+       * config/i386/t-sol2 (SHLIB_MAPFILES): Add it.
+
 2010-03-30  Jack Howarth <howarth@bromo.med.uc.edu>
 
        PR c/43553
index 706d01a..86159b7 100644 (file)
@@ -600,6 +600,7 @@ case ${host} in
 i[34567]86-*-darwin* | x86_64-*-darwin* | \
   i[34567]86-*-kfreebsd*-gnu | x86_64-*-kfreebsd*-gnu | \
   i[34567]86-*-linux* | x86_64-*-linux* | \
+  i[34567]86-*-solaris2* | \
   i[34567]86-*-cygwin* | i[34567]86-*-mingw* | x86_64-*-mingw*)
        if test "${host_address}" = 32; then
                tmake_file="${tmake_file} t-softfp i386/${host_address}/t-fprules-softfp"
index 85ddb74..ccff314 100644 (file)
@@ -136,7 +136,7 @@ struct fenv
     if (_fex & FP_EX_INVALID)                                          \
       {                                                                        \
        float f = 0.0;                                                  \
-       __asm__ __volatile__ ("fdiv %0" : "+t" (f));                    \
+       __asm__ __volatile__ ("fdiv {%y0, %0|%0, %y0}" : "+t" (f));     \
        __asm__ __volatile__ ("fwait");                                 \
       }                                                                        \
     if (_fex & FP_EX_DIVZERO)                                          \
diff --git a/libgcc/config/i386/libgcc-sol2.ver b/libgcc/config/i386/libgcc-sol2.ver
new file mode 100644 (file)
index 0000000..8d94d3c
--- /dev/null
@@ -0,0 +1,96 @@
+# Copyright (C) 2010 Free Software Foundation, Inc.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GCC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3.  If not see
+# <http://www.gnu.org/licenses/>.
+
+# 128 bit long double support was introduced with GCC 4.5.0 for Solaris 2.
+# These lines make the symbols to get a @@GCC_4.5.0.
+
+%exclude {
+  __addtf3
+  __copysigntf3
+  __divtc3
+  __divtf3
+  __eqtf2
+  __extenddftf2
+  __extendsftf2
+  __extendxftf2
+  __fabstf2
+  __fixtfdi
+  __fixtfsi
+  __fixtfti
+  __fixunstfdi
+  __fixunstfsi
+  __fixunstfti
+  __floatditf
+  __floatsitf
+  __floattitf
+  __floatunditf
+  __floatunsitf
+  __floatuntitf
+  __getf2
+  __gttf2
+  __letf2
+  __lttf2
+  __multc3
+  __multf3
+  __negtf2
+  __netf2
+  __powitf2
+  __subtf3
+  __trunctfdf2
+  __trunctfsf2
+  __trunctfxf2
+  __unordtf2
+}
+
+GCC_4.5.0 {
+  __addtf3
+  __copysigntf3
+  __divtc3
+  __divtf3
+  __eqtf2
+  __extenddftf2
+  __extendsftf2
+  __extendxftf2
+  __fabstf2
+  __fixtfdi
+  __fixtfsi
+  __fixtfti
+  __fixunstfdi
+  __fixunstfsi
+  __fixunstfti
+  __floatditf
+  __floatsitf
+  __floattitf
+  __floatunditf
+  __floatunsitf
+  __floatuntitf
+  __getf2
+  __gttf2
+  __letf2
+  __lttf2
+  __multc3
+  __multf3
+  __negtf2
+  __netf2
+  __powitf2
+  __subtf3
+  __trunctfdf2
+  __trunctfsf2
+  __trunctfxf2
+  __unordtf2
+}
index 351d7fb..883b1a9 100644 (file)
@@ -32,3 +32,6 @@ $(T)crtn.o: $(gcc_srcdir)/config/i386/sol2-cn.asm $(GCC_PASSES)
 
 CRTSTUFF_T_CFLAGS = -fPIC -O2
 TARGET_LIBGCC2_CFLAGS = -fPIC
+
+# Add support for the introduction of 128-bit long double.
+SHLIB_MAPFILES += $(srcdir)/config/i386/libgcc-sol2.ver