Questions about march/mcpu/mattr and good generic defaults
David Nadlinger
code at klickverbot.at
Mon Dec 23 06:59:35 PST 2013
On Thursday, 19 December 2013 at 23:28:50 UTC, Mikko Ronkainen
wrote:
> Do -m32/m64 just mean -march=x86/x86-64? Or do they something
> else too?
They generally switch between 32/64 bit subtargets for different
processor families, not just x86. But yes, they just set the
general target architecture. For the default -mcpu settings this
implies on the various operating systems, see:
https://github.com/ldc-developers/ldc/blob/master/driver/targetmachine.cpp#L30
> To create a generic 32-bit program, are these sane choices:
>
> -m32 -mcpu=i686 -mattr=sse2 ?
Depends on what level of backward-compatibility you need. All 64
bit processors support SSE2 (which is why it is enabled by
default there).
> And with 64-bit:
>
> -m64 -mcpu=x86_64 -mattr=avx ?
>
> Not sure about the avx though, doesn't seem to help my program
> anymore than sse2.
You definitely can't expect 64 bit machines out in the wild to
have AVX yet. For example, the Core i7 in the mid-2010 MacBook
Pro I'm typing this message on doesn't support it.
On the other hand, if you want to compile your program only for a
few machines with similar processors you control, you could also
try using -mcpu=native to let LDC auto-detect the available
features.
David
More information about the digitalmars-d-ldc
mailing list