Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 16 Aug 2013 14:33:29 +0200
From:      Dimitry Andric <dim@FreeBSD.org>
To:        Jung-uk Kim <jkim@FreeBSD.org>
Cc:        Konstantin Belousov <kostikbel@gmail.com>, freebsd-current@FreeBSD.org, Dmitry Morozovsky <marck@rinet.ru>, Peter Wemm <peter@wemm.org>
Subject:   Re: building i386 world on amd64 host: failed @svn
Message-ID:  <70C1942B-8BA3-47D8-BFE4-3DC3B5CAD56C@FreeBSD.org>
In-Reply-To: <520D2E40.2090704@FreeBSD.org>
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>

next in thread | previous in thread | raw e-mail | index | archive | help
On Aug 15, 2013, at 21:38, Jung-uk Kim <jkim@FreeBSD.org> wrote:
> On 2013-08-15 15:30:49 -0400, Konstantin Belousov wrote:
>> On Thu, Aug 15, 2013 at 09:12:52PM +0200, Dimitry Andric wrote:
>>> On Aug 15, 2013, at 20:36, Konstantin Belousov
>>> <kostikbel@gmail.com> wrote:
>>>> Does the linux box defaults to pentium or higher for -march ? 
>>>> 64 bit atomics cannot be implemented in usermode on i386 on 
>>>> processors which do not have cmpxchg8b instruction.
>>> 
>>> Ah yes, you are totally right, with -v it gives:
>>> 
>>> COLLECT_GCC_OPTIONS='-O2' '-S' '-v' '-mtune=generic'
>>> '-march=i586'
>>> 
>>> So we should really disable atomics for i486 and lower?  Though I
>>> have understood that there also some pentiums without
>>> cmpxchg8b...
>> 
>> I do not think that there was any Pentium-branded CPU which did
>> not implemented cmpxchg8b.  Some late 486 did provided cpuid, but I
>> am almost certain that they did not have cmpxchg8b (cannot check
>> anyway).
> 
> It is actually little complicated.
> 
> http://www.geoffchappell.com/studies/windows/km/cpu/cx8.htm


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

 /* Is GNOME Keyring support enabled? */
 /* #undef SVN_HAVE_GNOME_KEYRING */

Those rules can be extended for other arches or CPUs that don't support
64-bit atomic operations.

-Dimitry




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?70C1942B-8BA3-47D8-BFE4-3DC3B5CAD56C>