Обнаружил, что GCC в -march=native подставляет мне -march=silvermont и отключает некоторые поддерживаемые процом инструкции. Это на KabyLake Pentium'е.
$ gcc -march=native -E -v - </dev/null 2>&1 | grep cc1
/usr/libexec/gcc/x86_64-pc-linux-gnu/6.4.0/cc1 -E -quiet -v -
-march=silvermont -mmmx -mno-3dnow -msse -msse2-msse3 -mssse3
-mno-sse4a -mcx16 -msahf -mmovbe -maes -mno-sha -mpclmul
-mpopcnt -mabm -mno-lwp -mno-fma -mno-fma4 -mno-xop -mno-bmi
-mno-bmi2 -mno-tbm -mno-avx -mno-avx2 -msse4.2 -msse4.1 -mlzcnt
-mno-rtm -mno-hle -mrdrnd -mno-f16c -mfsgsbase -mrdseed -mprfchw
-mno-adx -mfxsr -mno-xsave -mno-xsaveopt -mno-avx512f
-mno-avx512er -mno-avx512cd -mno-avx512pf -mno-prefetchwt1
-mclflushopt -mno-xsavec -mno-xsaves -mno-avx512dq -mno-avx512bw
-mno-avx512vl -mno-avx512ifma -mno-avx512vbmi -mno-clwb
-mno-mwaitx -mno-clzero -mno-pku --param l1-cache-size=32
--param l1-cache-line-size=64 --param l2-cache-size=3072
-mtune=generic
Это нормальное поведение для gcc 6.4? Он вроде как должен выставлять -march=skylake.