When compiling SSE code without optimization (or when using it in a way that makes gcc think it needs to spill xmm registers to the stack), gcc will not make sure the stack is 16-byte aligned. That causes the SSE store instruction to generate a segmentation fault. This behavior is in 3.1.1 (earliest I have) up to the current 3.4 CVS. Release: 3.4 20030129 (experimental) Environment: System: Linux hellhound 2.4.20-wolk4.0s-pre7 #2 Wed Jan 22 13:14:55 CET 2003 i686 AMD Athlon(tm) XP 2000+ AuthenticAMD GNU/Linux Architecture: i686 host: i686-pc-linux-gnu build: i686-pc-linux-gnu target: i686-pc-linux-gnu configured with: ./configure --program-transform-name=s/^/e/ --prefix=/opt/gcc --with-local-prefix=/usr/local --disable-nls : (reconfigured) ./configure --program-transform-name=s/^/e/ --prefix=/opt/gcc --with-local-prefix=/usr/local --disable-nls --enable-__cxa_atexit How-To-Repeat: $ cat ssebug.c #include <xmmintrin.h> main() { static float scale=32768.f; __m128 Scale=_mm_load1_ps(&scale); } $ gcc -o ssebug ssebug.c -msse $ ./ssebug [segfault]
Fix: align the stack variables. Since spilling to the stack in most cases negates the performance gain the programmer hopes for with SSE, I also suggest a compiler warning in this case.
Responsible-Changed-From-To: unassigned->bernds Responsible-Changed-Why: Bernd, would be possible to look into the dynamic stack alignment? I can try to prepare updated patches...
State-Changed-From-To: open->closed State-Changed-Why: This is known problem with runtimes not aligning stack properly. The frame of function main is missaligned, other functions works. Bernd has code for dynamic stack alignment, hope it will get applied one day
Jan, we need to have a specific bug this is a duplicate of...
*** Bug 12091 has been marked as a duplicate of this bug. ***
This is a dup of bug 10395, it is a problem in main and in pthreads call-backs. *** This bug has been marked as a duplicate of 10395 ***