Package: gcc-4.1 Version: 4.1.1-21 --- begin bug.c --- typedef long long v2di __attribute__ ((vector_size(16))); extern long long x(void); extern long long y(void);
v2di test(void) { return (v2di){x(),y()}; } --- end bug.c --- When the above is compiled with `gcc -O -msse2 -S bug.c', the following incorrect code is generated. Both values get loaded into the lower vector component,while the upper component is zeroed. --- begin bug.s --- .file "bug.c" .text .globl test .type test, @function test: pushl %ebp movl %esp, %ebp subl $24, %esp call x movl %eax, -8(%ebp) movl %edx, -4(%ebp) call y movl %eax, -16(%ebp) movl %edx, -12(%ebp) movq -16(%ebp), %xmm1 movlps -8(%ebp), %xmm1 movdqa %xmm1, %xmm0 leave ret .size test, .-test .ident "GCC: (GNU) 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)" .section .note.GNU-stack,"",@progbits --- end bug.s --- Regards, Geoff. Send instant messages to your online friends http://au.messenger.yahoo.com -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]