Wenn wir fragen, was -march=native
expandiert nach, scheint das Ergebnis, wie esWarum `gcc -Q -march = corei7-avx --help = target` liegt?
$ gcc -Q -march=native --help=target | grep -E '^\s+-.*(sse|march)'
-march= corei7-avx
-mno-sse4 [disabled]
-msse [enabled]
-msse2 [enabled]
-msse2avx [disabled]
-msse3 [enabled]
-msse4 [enabled]
-msse4.1 [enabled]
-msse4.2 [enabled]
-msse4a [disabled]
-msse5
-msseregparm [disabled]
-mssse3 [enabled]
Aber wenn die Architektur direkt angegeben sein sollte, gcc fällt der SSE-Flags für native
ermöglichen würde, warum?
$ gcc -Q -march=corei7-avx --help=target | grep -E '^\s+-.*sse'
-mno-sse4 [enabled]
-msse [disabled]
-msse2 [disabled]
-msse2avx [disabled]
-msse3 [disabled]
-msse4 [disabled]
-msse4.1 [disabled]
-msse4.2 [disabled]
-msse4a [disabled]
-msse5
-msseregparm [disabled]
-mssse3 [disabled]
Compilation mit -march=corei7-avx
zeigt jedoch, dass sie aktiviert sein werden.
$ echo | gcc -march=corei7-avx -dM -E - | grep -i sse
#define __SSE4_1__ 1
#define __SSE4_2__ 1
#define __SSE2_MATH__ 1
#define __SSE_MATH__ 1
#define __SSE2__ 1
#define __SSSE3__ 1
#define __SSE__ 1
#define __SSE3__ 1
Lie impliziert eine Absicht zu täuschen, was ich bezweifle, ist der Fall, mit * inkorrekt * oder ein anderes ähnliches Wort scheint angemessener. –