Note: AFAIKS this is NOT a problem reated to stack alignment (as in 10395) but to missing instructions. This one IS similar to 11802 (if not a duplicate), but if it is, that one was erroneously marked as duplicate of 10395.
Compiling simd-1.c with -O0 -march=pentium3 and running the resulting executable yields abort() being called and a core being thrown. Analysing the core, the following suggests the assignment to res in L35 being incomplete (what causes the subsequent verify() to fail): (gdb) p k $2 = {160, 113, 170, 230} (gdb) p res $3 = {v = {160, 113, 0, 0}, i = {160, 113, 0, 0}} (gdb) x/20d &i 0x8049ae0 <i>: 150 100 150 200 0x8049af0 <j>: 10 13 20 30 0x8049b00 <completed.1>: 0 0 0 0 0x8049b10 <k>: 160 113 170 230 0x8049b20 <res>: 160 113 0 0 The following assembler code is generated: .loc 1 34 0 movq i, %mm0 paddd j, %mm0 movq %mm0, k movq i+8, %mm0 paddd j+8, %mm0 movq %mm0, k+8 .loc 1 35 0 movdqa k, %xmm0 movdqa %xmm0, res .loc 1 37 0 gcc 3.3.6 generates the following code (which works): .loc 1 34 0 movq i, %mm0 paddd j, %mm0 movq %mm0, k movq i+8, %mm0 paddd j+8, %mm0 movq %mm0, k+8 .loc 1 35 0 movaps k, %xmm0 movaps %xmm0, res I do not know the difference between these two instructions (movdqa vs. movaps), but to me it seems, gcc 3.4.4 selects the wrong one. -- Summary: simd tests fail Product: gcc Version: 3.4.4 Status: UNCONFIRMED Severity: normal Priority: P2 Component: c AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: tg42 at gmx dot de 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=21833