<div dir="ltr"><div>I just found exactly the same thing! Well, I used i686 instead.<br><br></div>Sounds like it's worthwhile to see if this is limited to ghc-prim or if there's more stuff that's built with i386. <br>
</div><div class="gmail_extra"><br><br><div class="gmail_quote">2014-07-17 8:21 GMT+02:00 Páli Gábor János <span dir="ltr"><<a href="mailto:pali.gabor@gmail.com" target="_blank">pali.gabor@gmail.com</a>></span>:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">2014-07-17 0:51 GMT+02:00 Páli Gábor János <<a href="mailto:pali.gabor@gmail.com">pali.gabor@gmail.com</a>>:<br>
<div><div class="h5">> 2014-07-17 0:47 GMT+02:00 Niklas Larsson <<a href="mailto:metaniklas@gmail.com">metaniklas@gmail.com</a>>:<br>
>> I hope they can just be done away with at the source, that is to make gcc<br>
>> generate the assembly primitives. GHC should already be built with i686, but<br>
>> does that reach ghc-prim?<br>
><br>
> This depends on GCC -- if no -march=XXX is explicitly set, I guess it<br>
> will take its default, which may vary platform by platform.<br>
<br>
</div></div>All right, I have finally got a Windows (x64) machine and installed<br>
the msys2 environment by the GHC wiki [1].  This has GCC 4.5.2 (as<br>
Niklas wrote earlier), where the default -march is i386.  You should<br>
see this line when trying to compile Johan's test program with the -v<br>
flag set:<br>
<br>
COLLECT_GCC_OPTIONS= ... '-v' '-mtune=i386' '-march=i386'<br>
<br>
With the -march=i586 flag explicitly set in the command line, no<br>
__sync_fetch_and_add_n() calls are generated.<br>
<br>
[1] <a href="https://ghc.haskell.org/trac/ghc/wiki/Building/Preparation/Windows/MSYS2" target="_blank">https://ghc.haskell.org/trac/ghc/wiki/Building/Preparation/Windows/MSYS2</a><br>
</blockquote></div><br></div>