Ну вот есть скажем такой код на С:
double d1 = 1;
double d2 = 3;
...
d1 *= d2;
d2 *= d1;
теперь компилируем его с g++ 4.3:
g++ -mfpmath=sse -msse -msse2 -msse3
получаем:
movsd -32(%rbp), %xmm0
mulsd -24(%rbp), %xmm0
movsd %xmm0, -32(%rbp)
movsd -24(%rbp), %xmm0
mulsd -32(%rbp), %xmm0
movsd %xmm0, -24(%rbp)
причем при оптимизации -O3 ничего не менятеся (ну сохранение обратно в ОЗУ исчезает). А как заставить генерировать SIMD с упаковкой данных? Ведь идея SSE2 в точ чтобы вместо предыдущего было например такое:
movhpd -32(%rbp), %xmm0
movlpd -24(%rbp), %xmm0
mulpd -32(%rbp), %xmm0
movhpd %xmm0, -24(%rbp)
movlpd %xmm0, -32(%rbp)
Заметьте на одно уможение меньше. Я глуп или компилятор про пакетные инструкции не в курсе?