On Fri, May 26, 2023 at 02:19:54PM +0200, Stefan Kanthak wrote: > > 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?
Jonathan told you what to use to find it out (-Q --help=target). -m32/-m64/-mx32/-m16 options don't affect the ISA, they switch the main ABI (ilp32 32-bit code, lp64 64-bit code, ilp32 code running in 64-bit mode, 16-bit code). -march= options selects the ISA base (which CPU family to compile form as minimum), if you don't supply it, the default from how gcc has been configured is selected (e.g. if you configure --with-arch-32=core2, then that will be the -m32 default, if you configure --with-arch=x86-64, that will be the -march default if --with-arch-32= isn't specified, etc.). If more than one -march= is specified, the last one wins. And, the -mISA options then tweak the ISA set. Most ISAs have dependencies, say -msse4.1 enables -mssse3 which enables -msse3 which enables -msse2 etc., and similarly the -mno-ISA options disable what ISAs depend on it, so -mno-avx disables -mno-avx2 which disables -mno-avx512f which disables ... -mtune= option specifies for which CPU family the code should be tuned, it will still run on any code compatible with the implicit or explicit -march=, but will schedule instructions or choose from alternative forms from the selected ISAs to perform best on the -mtune= family. Jakub