[Bug target/37003] 4.2.2 -mfpmath=sse causes movapd from non-16-byte aligned address
vastheman at users dot sourceforge.net
gcc-bugzilla@gcc.gnu.org
Sat Feb 26 09:36:00 GMT 2011
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
More information about the Gcc-bugs
mailing list