Patchwork [RFA] : cygming, darwin, freebsd: Build libgcc2 TCmode complex functions

login
register
mail settings
Submitter Uros Bizjak
Date Sept. 1, 2010, 12:55 p.m.
Message ID <AANLkTikdz++hMyYfU2KOtOWXeki+kreffo4zCD5O5RPT@mail.gmail.com>
Download mbox | patch
Permalink /patch/63376/
State New
Headers show

Comments

Uros Bizjak - Sept. 1, 2010, 12:55 p.m.
Hello!

Attached patch enables building of TCmode complex functions from
libgcc2 for cygwin, darwin and freebsd targets. The patch also removes
linux64.h defines since these are already defined in linux.h.

2010-09-01  Uros Bizjak  <ubizjak@gmail.com>

	PR target/45476
	* config/i386/darwin.h (LIBGCC2_HAS_TF_MODE, LIBGCC2_TF_CEXT, TF_SIZE):
	New defines.
	* config/i386/freebsd.h (LIBGCC2_HAS_TF_MODE, LIBGCC2_TF_CEXT, TF_SIZE):
	Ditto.
	* config/i386/linux64.h (LIBGCC2_HAS_TF_MODE, LIBGCC2_TF_CEXT, TF_SIZE):
	Remove defines.
	* config/i386/cygming.h (LIBGCC2_HAS_TF_MODE, LIBGCC2_TF_CEXT, TF_SIZE):
	Move from ...
	* config/i386/mingw32.h: ... here.

Patch was bootstrapped on x86_64-pc-linux-gnu. Can please relevant
target maintainers check if everything is OK on their targets?

Uros.
Kai Tietz - Sept. 1, 2010, 1:08 p.m.
2010/9/1 Uros Bizjak <ubizjak@gmail.com>:
> Hello!
>
> Attached patch enables building of TCmode complex functions from
> libgcc2 for cygwin, darwin and freebsd targets. The patch also removes
> linux64.h defines since these are already defined in linux.h.
>
> 2010-09-01  Uros Bizjak  <ubizjak@gmail.com>
>
>        PR target/45476
>        * config/i386/darwin.h (LIBGCC2_HAS_TF_MODE, LIBGCC2_TF_CEXT, TF_SIZE):
>        New defines.
>        * config/i386/freebsd.h (LIBGCC2_HAS_TF_MODE, LIBGCC2_TF_CEXT, TF_SIZE):
>        Ditto.
>        * config/i386/linux64.h (LIBGCC2_HAS_TF_MODE, LIBGCC2_TF_CEXT, TF_SIZE):
>        Remove defines.
>        * config/i386/cygming.h (LIBGCC2_HAS_TF_MODE, LIBGCC2_TF_CEXT, TF_SIZE):
>        Move from ...
>        * config/i386/mingw32.h: ... here.
>
> Patch was bootstrapped on x86_64-pc-linux-gnu. Can please relevant
> target maintainers check if everything is OK on their targets?
>
> Uros.
>

Mingw parts is ok.

Kai
IainS - Sept. 1, 2010, 1:44 p.m.
On 1 Sep 2010, at 13:55, Uros Bizjak wrote:

> Attached patch enables building of TCmode complex functions from
> libgcc2 for cygwin, darwin and freebsd targets. The patch also removes
> linux64.h defines since these are already defined in linux.h.
>
> 2010-09-01  Uros Bizjak  <ubizjak@gmail.com>
>
> 	PR target/45476
> 	* config/i386/darwin.h (LIBGCC2_HAS_TF_MODE, LIBGCC2_TF_CEXT,  
> TF_SIZE):
> 	New defines.
> 	* config/i386/freebsd.h (LIBGCC2_HAS_TF_MODE, LIBGCC2_TF_CEXT,  
> TF_SIZE):
> 	Ditto.
> 	* config/i386/linux64.h (LIBGCC2_HAS_TF_MODE, LIBGCC2_TF_CEXT,  
> TF_SIZE):
> 	Remove defines.
> 	* config/i386/cygming.h (LIBGCC2_HAS_TF_MODE, LIBGCC2_TF_CEXT,  
> TF_SIZE):
> 	Move from ...
> 	* config/i386/mingw32.h: ... here.
>
> Patch was bootstrapped on x86_64-pc-linux-gnu. Can please relevant
> target maintainers check if everything is OK on their targets?


darwin;

this seems to conflict with LIB2_SIDITI_CONV_FUNCS  (set in i386/t- 
darwin) [multiply defined symbols => bootstrap fail]

AFAICT from grep, LIB2_SIDITI_CONV_FUNCS is only used by darwin and  
mips.

It's not a simple matter of removing it ...
Perhaps an additional conditional in libgcc/Makefile.in will solve  
this - I'll try and take a look later.

(not that I can approve or otherwise in any case :-))

Iain
Uros Bizjak - Sept. 1, 2010, 5:27 p.m.
On Wed, 2010-09-01 at 14:44 +0100, IainS wrote:
> On 1 Sep 2010, at 13:55, Uros Bizjak wrote:
> 
> > Attached patch enables building of TCmode complex functions from
> > libgcc2 for cygwin, darwin and freebsd targets. The patch also removes
> > linux64.h defines since these are already defined in linux.h.

> 
> darwin;
> 
> this seems to conflict with LIB2_SIDITI_CONV_FUNCS  (set in i386/t- 
> darwin) [multiply defined symbols => bootstrap fail]
> 
> AFAICT from grep, LIB2_SIDITI_CONV_FUNCS is only used by darwin and  
> mips.
> 
> It's not a simple matter of removing it ...
> Perhaps an additional conditional in libgcc/Makefile.in will solve  
> this - I'll try and take a look later.

It looks that you should enable softfp_exclude_libgcc2 := y to filter
out old functions. However, I'd investigate why darwin needs
LIB2_SIDITI_CONV_FUNCS in the first place...

Uros.
Gerald Pfeifer - Sept. 1, 2010, 10:40 p.m.
On Wed, 1 Sep 2010, Uros Bizjak wrote:
> 	* config/i386/freebsd.h (LIBGCC2_HAS_TF_MODE, LIBGCC2_TF_CEXT, TF_SIZE):
> 	Ditto.

I am happy to confirm that with this patch the example from comment #2
of PR 45476 now compiles, where without it I could reproduce the failures
listed there.

The testsuite is still running, but so far things look good.  Do you
expect to see any new PASSes?

Gerald
Uros Bizjak - Sept. 2, 2010, 5:08 a.m.
On Thu, 2010-09-02 at 00:40 +0200, Gerald Pfeifer wrote:
> On Wed, 1 Sep 2010, Uros Bizjak wrote:
> > 	* config/i386/freebsd.h (LIBGCC2_HAS_TF_MODE, LIBGCC2_TF_CEXT, TF_SIZE):
> > 	Ditto.
> 
> I am happy to confirm that with this patch the example from comment #2
> of PR 45476 now compiles, where without it I could reproduce the failures
> listed there.

Thanks!  I have committed freebsd.h part of the patch to SVN mainline.

> The testsuite is still running, but so far things look good.  Do you
> expect to see any new PASSes?

No, since TCmode tests in gcc.target/i386 are currently limited to linux
targets only.  I will enable them for other __float128 capable targets
once Darwin catches up with TCmode libgcc2 support.

Uros.
Dave Korn - Sept. 3, 2010, 12:18 a.m.
On 01/09/2010 23:40, Gerald Pfeifer wrote:
> On Wed, 1 Sep 2010, Uros Bizjak wrote:
>> 	* config/i386/freebsd.h (LIBGCC2_HAS_TF_MODE, LIBGCC2_TF_CEXT, TF_SIZE):
>> 	Ditto.
> 
> I am happy to confirm that with this patch the example from comment #2
> of PR 45476 now compiles, where without it I could reproduce the failures
> listed there.
> 
> The testsuite is still running, but so far things look good.  Do you
> expect to see any new PASSes?

  I'm running the testsuite on cygwin with this patch, and it appears to be
working just fine; thank you Uros!

    cheers,
      DaveK

Patch

Index: config/i386/cygming.h
===================================================================
--- config/i386/cygming.h	(revision 163732)
+++ config/i386/cygming.h	(working copy)
@@ -296,6 +296,12 @@ 
 #define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \
   asm_output_aligned_bss ((FILE), (DECL), (NAME), (SIZE), (ALIGN))
 
+/* 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
+
 /* Output function declarations at the end of the file.  */
 #undef TARGET_ASM_FILE_END
 #define TARGET_ASM_FILE_END i386_pe_file_end
Index: config/i386/linux64.h
===================================================================
--- config/i386/linux64.h	(revision 163732)
+++ config/i386/linux64.h	(working copy)
@@ -99,12 +99,6 @@ 
 #define MULTILIB_DEFAULTS { "m32" }
 #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 TARGET_ASM_FILE_END file_end_indicate_exec_stack
 
 #define MD_UNWIND_SUPPORT "config/i386/linux-unwind.h"
Index: config/i386/darwin.h
===================================================================
--- config/i386/darwin.h	(revision 163732)
+++ config/i386/darwin.h	(working copy)
@@ -148,6 +148,12 @@ 
 
 #define SHIFT_DOUBLE_OMITS_COUNT 0
 
+/* 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
+
 #undef TARGET_ASM_FILE_END
 #define TARGET_ASM_FILE_END darwin_file_end
 
Index: config/i386/mingw32.h
===================================================================
--- config/i386/mingw32.h	(revision 163732)
+++ config/i386/mingw32.h	(working copy)
@@ -135,14 +135,6 @@ 
 #define STANDARD_STARTFILE_PREFIX_2 ""
 #endif
 
-/* Put all *tf routines in libgcc.  */
-#undef LIBGCC2_HAS_TF_MODE
-#define LIBGCC2_HAS_TF_MODE 1
-#undef LIBGCC2_TF_CEXT
-#define LIBGCC2_TF_CEXT q
-#undef TF_SIZE
-#define TF_SIZE 113
-
 /* Output STRING, a string representing a filename, to FILE.
    We canonicalize it to be in Unix format (backslashes are replaced
    forward slashes.  */
Index: config/i386/freebsd.h
===================================================================
--- config/i386/freebsd.h	(revision 163732)
+++ config/i386/freebsd.h	(working copy)
@@ -139,5 +139,11 @@ 
 #undef TARGET_96_ROUND_53_LONG_DOUBLE
 #define TARGET_96_ROUND_53_LONG_DOUBLE (!TARGET_64BIT)
 
+/* 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
+
 /* Static stack checking is supported by means of probes.  */
 #define STACK_CHECK_STATIC_BUILTIN 1