Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 16 Aug 2013 17:41:50 +0200
From:      Dimitry Andric <dim@FreeBSD.org>
To:        Konstantin Belousov <kostikbel@gmail.com>
Cc:        freebsd-current@FreeBSD.org, Dmitry Morozovsky <marck@rinet.ru>, Jung-uk Kim <jkim@FreeBSD.org>, Peter Wemm <peter@wemm.org>
Subject:   Re: building i386 world on amd64 host: failed @svn
Message-ID:  <495D839B-4327-4E96-B4F4-66413D2ACD78@FreeBSD.org>
In-Reply-To: <20130816150201.GF4972@kib.kiev.ua>
References:  <alpine.BSF.2.00.1307281713160.55051@woozle.rinet.ru> <17A40261-A0DA-4070-990F-0D0777A5BE44@FreeBSD.org> <20130815183640.GR4972@kib.kiev.ua> <D559C583-B0A9-4731-B454-3521635AEC79@FreeBSD.org> <20130815193049.GU4972@kib.kiev.ua> <520D2E40.2090704@FreeBSD.org> <70C1942B-8BA3-47D8-BFE4-3DC3B5CAD56C@FreeBSD.org> <20130816150201.GF4972@kib.kiev.ua>

next in thread | previous in thread | raw e-mail | index | archive | help
On Aug 16, 2013, at 17:02, Konstantin Belousov <kostikbel@gmail.com> wrote:
> On Fri, Aug 16, 2013 at 02:33:29PM +0200, Dimitry Andric wrote:
...
>> In contrast, gcc's rules (in contrib/gcc/config/i386/i386.c) are pretty
>> straightforward:
>> 
>>  /* Compare and exchange was added for 80486.  */
>>  const int x86_cmpxchg = ~m_386;
>>  /* Compare and exchange 8 bytes was added for pentium.  */
>>  const int x86_cmpxchg8b = ~(m_386 | m_486);
>> 
>> So maybe the following is a safe enough solution for now:
>> 
>> Index: usr.bin/svn/svn_private_config.h
>> ===================================================================
>> --- usr.bin/svn/svn_private_config.h    (revision 254300)
>> +++ usr.bin/svn/svn_private_config.h    (working copy)
>> @@ -153,7 +153,9 @@
>> #define SVN_FS_WANT_DB_PATCH 14
>> 
>> /* Define if compiler provides atomic builtins */
>> +#if !defined(__i386__) || !defined(__i486__)
>> #define SVN_HAS_ATOMIC_BUILTINS 1
>> +#endif
> I do not understand this.  Isn't __i386__ defined always when compiling
> for 32bit x86 ?  
> 
> The !defined(__i486__) part assumes that any other cpu variation supported
> by compiler has cmpxchg8b.


Yes, that was the intention.  So if it is i386 arch, but the CPU isn't
i486, the builtins can be enabled.  This is the same logic that gcc
itself uses.

It only breaks down when compiling with -mcpu=i386 though, but I don't
think we support that anymore?

The ifdef was just the negation of:

#if defined(__i386__) && defined(__i486__)
#undef SVN_HAS_ATOMIC_BUILTINS
#endif

-Dimitry




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?495D839B-4327-4E96-B4F4-66413D2ACD78>