
I just found exactly the same thing! Well, I used i686 instead.
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.
2014-07-17 8:21 GMT+02:00 Páli Gábor János
2014-07-17 0:51 GMT+02:00 Páli Gábor János
: 2014-07-17 0:47 GMT+02:00 Niklas Larsson
: I hope they can just be done away with at the source, that is to make gcc generate the assembly primitives. GHC should already be built with i686, but does that reach ghc-prim?
This depends on GCC -- if no -march=XXX is explicitly set, I guess it will take its default, which may vary platform by platform.
All right, I have finally got a Windows (x64) machine and installed the msys2 environment by the GHC wiki [1]. This has GCC 4.5.2 (as Niklas wrote earlier), where the default -march is i386. You should see this line when trying to compile Johan's test program with the -v flag set:
COLLECT_GCC_OPTIONS= ... '-v' '-mtune=i386' '-march=i386'
With the -march=i586 flag explicitly set in the command line, no __sync_fetch_and_add_n() calls are generated.
[1] https://ghc.haskell.org/trac/ghc/wiki/Building/Preparation/Windows/MSYS2