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

login
register
mail settings
Submitter Uros Bizjak
Date Sept. 2, 2010, 10:25 a.m.
Message ID <AANLkTikD2Y4fB0i8d_r6Gjf6oxFch4LuPFouCAA-imXX@mail.gmail.com>
Download mbox | patch
Permalink /patch/63468/
State New
Headers show

Comments

Uros Bizjak - Sept. 2, 2010, 10:25 a.m.
On Thu, Sep 2, 2010 at 11:48 AM, IainS <developer@sandoe-acoustics.co.uk> wrote:
>
> On 2 Sep 2010, at 06:08, Uros Bizjak wrote:
>>>
>>> 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.
>
>
> well, there are differences in approach;
> In the system levels, Darwin uses fat libraries rather than separating m32
> and m64 into different directories.
>
> The 'old' symbol exports for a build of gcc  to run on Darwin* have to agree
> with those in the relevant system version of libgcc_s - which are defined by
> common export lists.   For 'new' symbols  this is immaterial.
>
> However, some of the relevant symbols are not 'new' - we've been exporting
> them for years (via the LIB2_SIDITI_CONV_FUNCS mechanism) - so we must
> accommodate that.
>
> It turns out that the libgcc Makefile does not honor LIB2FUNCS_EXCLUDE for
> these functions in the case of LIB2_SIDITI_CONV_FUNCS=yes.
>
> I suspect that this an oversight - since it does honor it otherwise.
>
> the patch below bootstrapped on i686-darwin9 (currently reg-testing) and has
> passed stage1 on i686-darwin8 and x86_64-darwin10
>
> AFAICT the only targets using LIB2_SIDITI_CONV_FUNCS are MIPS and Darwin.
>
> cheers,
> Iain
>
> Index: libgcc/Makefile.in
> ===================================================================
> --- libgcc/Makefile.in  (revision 163732)
> +++ libgcc/Makefile.in  (working copy)
> @@ -384,9 +384,9 @@ ifneq ($(LIB2_SIDITI_CONV_FUNCS),)
>  # functions are built with a wordsize of 4; the TImode functions are
>  # built with the same labels, but a wordsize of 8.
>
> -sifuncs = $(subst XX,si,$(swfloatfuncs))
> -difuncs = $(subst XX,di,$(dwfloatfuncs))
> -tifuncs = $(subst XX,ti,$(dwfloatfuncs))
> +sifuncs := $(filter-out $(LIB2FUNCS_EXCLUDE),$(subst
> XX,si,$(swfloatfuncs)))
> +difuncs := $(filter-out $(LIB2FUNCS_EXCLUDE),$(subst
> XX,di,$(dwfloatfuncs)))
> +tifuncs := $(filter-out $(LIB2FUNCS_EXCLUDE),$(subst
> XX,ti,$(dwfloatfuncs)))
>
>  iter-items := $(sifuncs) $(difuncs) $(tifuncs)
>  iter-labels := $(sifuncs) $(difuncs) $(difuncs)
> Index: gcc/config/i386/t-darwin
> ===================================================================
> --- gcc/config/i386/t-darwin    (revision 163732)
> +++ gcc/config/i386/t-darwin    (working copy)
> @@ -2,3 +2,4 @@ MULTILIB_OPTIONS = m64
>  MULTILIB_DIRNAMES = x86_64
>  LIB2_SIDITI_CONV_FUNCS=yes
>  LIB2FUNCS_EXTRA = $(srcdir)/config/darwin-64.c
> +LIB2FUNCS_EXCLUDE = _fixtfdi _fixunstfdi _floatditf _floatunditf
>
>
>

I assume you also included this patch:


Uros.
IainS - Sept. 2, 2010, 10:29 a.m.
On 2 Sep 2010, at 11:25, Uros Bizjak wrote:

> On Thu, Sep 2, 2010 at 11:48 AM, IainS <developer@sandoe-acoustics.co.uk 
> > wrote:
>>
>> On 2 Sep 2010, at 06:08, Uros Bizjak wrote:
>>>>
>>>> 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.
>>
>>
>> well, there are differences in approach;
>> In the system levels, Darwin uses fat libraries rather than  
>> separating m32
>> and m64 into different directories.
>>
>> The 'old' symbol exports for a build of gcc  to run on Darwin* have  
>> to agree
>> with those in the relevant system version of libgcc_s - which are  
>> defined by
>> common export lists.   For 'new' symbols  this is immaterial.
>>
>> However, some of the relevant symbols are not 'new' - we've been  
>> exporting
>> them for years (via the LIB2_SIDITI_CONV_FUNCS mechanism) - so we  
>> must
>> accommodate that.
>>
>> It turns out that the libgcc Makefile does not honor  
>> LIB2FUNCS_EXCLUDE for
>> these functions in the case of LIB2_SIDITI_CONV_FUNCS=yes.
>>
>> I suspect that this an oversight - since it does honor it otherwise.
>>
>> the patch below bootstrapped on i686-darwin9 (currently reg- 
>> testing) and has
>> passed stage1 on i686-darwin8 and x86_64-darwin10
>>
>> AFAICT the only targets using LIB2_SIDITI_CONV_FUNCS are MIPS and  
>> Darwin.
>>
>> cheers,
>> Iain
>>
>> Index: libgcc/Makefile.in
>> ===================================================================
>> --- libgcc/Makefile.in  (revision 163732)
>> +++ libgcc/Makefile.in  (working copy)
>> @@ -384,9 +384,9 @@ ifneq ($(LIB2_SIDITI_CONV_FUNCS),)
>>  # functions are built with a wordsize of 4; the TImode functions are
>>  # built with the same labels, but a wordsize of 8.
>>
>> -sifuncs = $(subst XX,si,$(swfloatfuncs))
>> -difuncs = $(subst XX,di,$(dwfloatfuncs))
>> -tifuncs = $(subst XX,ti,$(dwfloatfuncs))
>> +sifuncs := $(filter-out $(LIB2FUNCS_EXCLUDE),$(subst
>> XX,si,$(swfloatfuncs)))
>> +difuncs := $(filter-out $(LIB2FUNCS_EXCLUDE),$(subst
>> XX,di,$(dwfloatfuncs)))
>> +tifuncs := $(filter-out $(LIB2FUNCS_EXCLUDE),$(subst
>> XX,ti,$(dwfloatfuncs)))
>>
>>  iter-items := $(sifuncs) $(difuncs) $(tifuncs)
>>  iter-labels := $(sifuncs) $(difuncs) $(difuncs)
>> Index: gcc/config/i386/t-darwin
>> ===================================================================
>> --- gcc/config/i386/t-darwin    (revision 163732)
>> +++ gcc/config/i386/t-darwin    (working copy)
>> @@ -2,3 +2,4 @@ MULTILIB_OPTIONS = m64
>>  MULTILIB_DIRNAMES = x86_64
>>  LIB2_SIDITI_CONV_FUNCS=yes
>>  LIB2FUNCS_EXTRA = $(srcdir)/config/darwin-64.c
>> +LIB2FUNCS_EXCLUDE = _fixtfdi _fixunstfdi _floatditf _floatunditf
>>
>>
>>
>
> I assume you also included this patch:

yes.
Iain

>
> 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
>
>
> Uros.

Patch

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