http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46716
H.J. Lu <hjl.tools at gmail dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC|hjl at gcc dot gnu.org |hjl.tools at gmail dot com, | |ubizjak at gmail dot com --- Comment #4 from H.J. Lu <hjl.tools at gmail dot com> 2010-11-30 13:40:23 UTC --- From http://gcc.gnu.org/ml/gcc/2010-11/msg00650.html I think this is a compiler bug in the i386 backend. The classify_argument function uses X86_64_SSEUP_CLASS for V2DFmode, and examine_argument counts that as requiring a single SSE register. However, since the SSE2 instructions are not available, the argument is split into two SSE registers. The result is that the first argument is passed in %xmm0/%xmm1, and the second argument is passed in %xmm1/%xmm2. That is, the arguments overlap, leading to the incorrect result. Basically, the 64-bit calling convention support assumes that the SSE2 instructions are always available, and silently fails when -mno-sse2 is used. I don't really have an opinion as to whether the compiler needs to support this case correctly, but I think that clearly it must not silently fail.