http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37003
Vas Crabb <vastheman at users dot sourceforge.net> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |vastheman at users dot | |sourceforge.net --- Comment #4 from Vas Crabb <vastheman at users dot sourceforge.net> 2011-02-26 09:30:56 UTC --- I can confirm that this still occurs in gcc version 4.3.3 20090124 (Red Hat 4.3.3-13) and in gcc version 4.5.3 (Ubuntu/Linaro 4.5.2-3ubuntu3). Using the same input, with the following options on gcc version 4.3.3 20090124 (Red Hat 4.3.3-13) (GCC): gcc -march=core2 -msse2 -mfpmath=sse -O3 -xc++ This is the prologue of the generated code for the function. The Linux i686 ABI doesn't guarantee any more than 32-bit alignment of %esp on entry to a function, and there is no code here to force alignment of %esp or %ebp: _Z18create_geo_to_topoP7DMATRIXdd: .LFB0: .cfi_startproc pushl %ebp .cfi_def_cfa_offset 8 movl %esp, %ebp .cfi_offset 5, -8 .cfi_def_cfa_register 5 pushl %ebx subl $148, %esp movl 8(%ebp), %ebx .cfi_offset 3, -12 Later in the function, we find the following code: leal -56(%ebp), %eax movapd %xmm0, -88(%ebp) movsd %xmm5, -40(%ebp) movl %eax, (%esp) call _Z11geo_lla_xyzIP7DVECTORS1_EvT_T0_ movapd -88(%ebp), %xmm0 movsd -24(%ebp), %xmm3 It is using movapd to save and restore the contents of %xmm0 around the function call. Since movapd re