The command line: gcc -O2 -msse2 -S 2.c The code: #include <emmintrin.h> int f(__m128i x, __m128i y) { __m128i m[1]; m[0] = _mm_add_epi16(x, y); return *(int*)(&m[0]); } int g(__m128i x, __m128i y) { __m128i m[2]; m[0] = _mm_add_epi16(x, y); return *(int*)(&m[0]); }
The compiler generates correct code for f(), but for g() the add operation (paddw) disappears. Happens on GCC 3.3.4 and 3.4.2 -- Summary: SSE2 intrinsics generates wrong code Product: gcc Version: 3.4.2 Status: UNCONFIRMED Severity: normal Priority: P2 Component: inline-asm AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: jochang at gmail dot com CC: gcc-bugs at gcc dot gnu dot org GCC build triplet: i686-pc-linux-gnu GCC host triplet: i686-pc-linux-gnu GCC target triplet: i686-pc-linux-gnu http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18074