[Liboil] alignment problems with sse2
David Schleef
ds at schleef.org
Tue Aug 29 14:53:00 PDT 2006
On Tue, Aug 29, 2006 at 12:40:02PM +0200, Matthias Drochner wrote:
> Hi -
> some of the sse2 optimized functions in liboil-0.3.9 cause
> GPFs for me occasionally, on a Pentium 4 running NetBSD-current
> (which uses a gcc 4.1.2 prerelease).
>
> This appears to be caused by aligned moves of __m128i variables
> allocated on the stack from/to xmm registers. Depending on
> stack alignment the variables are aligned to a 16-byte boundary
> or not, which explains that the problem occurs only sometimes.
> (I also wouldn't expect this to happen on amd64 because stack
> alignment is defined by the ABI there.)
>
> I believe this is gcc's fault: If I compile a small test function:
> #include <emmintrin.h>
> void
> mist(__m128i *p)
> {
> __m128i a;
>
> a = *p;
> }
>
> I'm getting code which doesn't enforce alignment:
> mist:
> pushl %ebp
> movl %esp, %ebp
> subl $24, %esp
> movl 8(%ebp), %eax
> movdqa (%eax), %xmm0
> movdqa %xmm0, -24(%ebp) <--HERE!
> leave
> ret
>
> Am I right here? If yes, is this a known gcc problem or should
> it be reported to the gcc people?
This is a known problem, see
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=368991
The best solution at this point (not yet implemented) is to fix
all the liboil functions to not use local variables for SSE.
dave...
--
David Schleef
Big Kitten LLC (http://www.bigkitten.com/) -- data acquisition on Linux
More information about the Liboil
mailing list