------- Comment #8 from hjl dot tools at gmail dot com 2010-09-16 13:02 -------
This also failed:
---
typedef float V __attribute__ ((vector_size (16)));
V g;
float d[4] = { 4, 3, 2, 1 };
int
main ()
{
V e;
__builtin_memcpy (&e, &d, sizeof (d));
V f = { 5, 15, 25, 35 };
e = e * f;
g = e;
return 0;
}
---
Program received signal SIGSEGV, Segmentation fault.
0x0804837e in main () at foo.c:11
11 e = e * f;
Missing separate debuginfos, use: debuginfo-install glibc-2.12.1-2.0.f13.i686
(gdb) disass
Dump of assembler code for function main:
0x08048374 <+0>: push %ebp
0x08048375 <+1>: mov %esp,%ebp
0x08048377 <+3>: movaps 0x8048470,%xmm0
=> 0x0804837e <+10>: mulps 0x8049644,%xmm0
0x08048385 <+17>: movaps %xmm0,0x8049670
0x0804838c <+24>: mov $0x0,%eax
0x08048391 <+29>: pop %ebp
0x08048392 <+30>: ret
End of assembler dump.
(gdb) q
There is no stack involved. Somehow we failed to align
array of float properly.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45678