"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

Reply via email to