Diese Anweisung ist Teil eines Baugruppenausgangs eines C-Programms (gcc -O2). Nach dem Ergebnis verstehe ich, dass ymm6
source operand 1
ist, dass alles, um ymm9
kloniert und dann xmm1
kloniert in die ymm6[127-256]
ich Intel manual lesen, aber es nutzt Syntax Intel Assembly nicht in dem & t und ich will nicht Intel-Syntax verwenden . Also ymm8
, ymm2
und ymm6
hier ist SRC1
. Ist das wahr?Warum gcc kompilieren _mm256_permute2f128_ps zu Vinsertf128 Anweisung?
vshufps $68, %ymm0, %ymm8, %ymm6
vshufps $68, %ymm4, %ymm2, %ymm1
Vinsertf128 $1, %xmm1, %ymm6, %ymm9
Und die wichtigste Frage ist, warum gcc
die Anweisung
row0 = _mm256_permute2f128_ps(__tt0, __tt4, 0x20);
zu
Vinsertf128 $1, %xmm1, %ymm6, %ymm9
und
row4 = _mm256_permute2f128_ps(__tt0, __tt4, 0x31);
geändert
zu
Vperm2f128 $49, %ymm1, %ymm6, %ymm1
Wie kann ich diese Optimierung ignorieren? Ich habe versucht -O0
aber funktioniert nicht.