"Jonathan Wakely" <jwakely....@gmail.com> wrote: > 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.
I underlined the relevant part, EXTRA FOR YOU! Bonus question: does every 32-bit i386 system support SSE instructions? > 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. This is NOT what the underlined part of the documentation says! > 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. "Then" means after, not before! Guess why I asked EXPLICITLY for the preferences?! > 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. That's your problem! Set some sequence points... > 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. I could have added PROPERLY, because that's where it CLEARLY fails, as shown by the generated unoptimised code. Stefan