On Fri, 26 May 2023 at 13:23, Stefan Kanthak <stefan.kant...@nexgo.de> wrote: > > "Jonathan Wakely" <jwakely....@gmail.com> wrote: > > > On Fri, 26 May 2023 at 12:42, Stefan Kanthak wrote: > >> Why does the documentation FAIL to specify that CPU features given by > >> -m* override -m32 or enables them in ADDITION to those enabled by -march=? > > > > Because it's obvious. If you ask for sse2 you get it. > > ARGH! The documentation for -m32 contradicts > > | -m32 > ... > | The -m32 option sets int, long, and pointer types to 32 bits, and > | generates code that runs on any i386 system. > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > > > I find it very SURPRISING that you're only just learning the basics of > > how to use gcc NOW, after YELLING about all the OUCH. > > I'm NOT surprised that you don't grok it! > > gcc -msse4.1 -m32 -march=core2 ... > > Which -m* options win here? > Do -m32 or -march=core2 override -msse4.1?
No, because -m32 says to generate code for the 32-bit model, it doesn't select an instruction set. A multilib x86_64 compiler has a default 64-bit arch and a default 32-bit arch. If you don't configure GCC with --with-arch-32 and/or --with-arch-64 then you get -march=x86-64 for both 32-bit and 64-bit. Using -m32 without -march will use the default 32-bit arch, which is probably x86-64. Using -m32 with any explicit -march will override the default, and use the one you specified. And I already said that -march selects the base instruction set, and then -msse4.1 adds to that, enabling sse4.1 as well. I said: -march enables the instructions listed for the relevant cpu family, then using -mxxx or -mno-xxx adds or removes particular instruction sets from the ones enabled by -march. So -march=core2 selects the instruction sets listed in the docs, and then -msse4.1 adds to that. I don't know how to say it more clearly. All this could have been explained easily and without conflict if you'd use the right mailing list in the first place and asked how things work, instead of storming in acting like a clown and being rude. "Will GCC eventually support SSE2 or SSE4.1?" is confrontational, and makes you look dumb. And it's just got worse since then.