dsable SSE2 support on amd64 for now. GCC generates code that causes

alignment faults.  the code is:

0x00007f7ffd40ccd7 <_pixman_implementation_create_sse2+0>:      push   %rbp
0x00007f7ffd40ccd8 <_pixman_implementation_create_sse2+1>:      mov    %rsp,%rbp
0x00007f7ffd40ccdb <_pixman_implementation_create_sse2+4>:      sub    $0x10,%rsp
...
0x00007f7ffd40cdab <_pixman_implementation_create_sse2+212>:    mov    $0xffffffffffffffff,%rdx
0x00007f7ffd40cdb2 <_pixman_implementation_create_sse2+219>:    mov    %rdx,0xfffffffffffffff0(%rbp)
0x00007f7ffd40cdb6 <_pixman_implementation_create_sse2+223>:    mov    %rdx,0xfffffffffffffff8(%rbp)
0x00007f7ffd40cdba <_pixman_implementation_create_sse2+227>:    movdqa 0xfffffffffffffff0(%rbp),%xmm0

upon entry we have stack aligned to 16 bytes.  the first instruction
subtracts 8, we copy this not-16-byte aligned value into %rbp, and
then decrement the stack by 16 bytes.

then we store a big -1 into 16 bytes on the stack, and then load it
into %xmm0.. except we load it from an unaligned pointer and GP.
This commit is contained in:
mrg 2010-12-01 08:59:12 +00:00
parent fe64a82d7b
commit eebfdc254d
1 changed files with 4 additions and 4 deletions

View File

@ -1,4 +1,4 @@
# $NetBSD: Makefile,v 1.12 2010/11/21 09:01:35 mrg Exp $
# $NetBSD: Makefile,v 1.13 2010/12/01 08:59:12 mrg Exp $
NOLINT= 1 # defined
@ -44,10 +44,10 @@ COPTS.pixman-mmx.c= -mmmx -fvisibility=hidden
MKDEPFLAGS+= -mmmx -fvisibility=hidden
.elif ${MACHINE_ARCH} == "x86_64"
SRCS+= pixman-mmx.c
SRCS+= pixman-sse2.c
# XXX sse2 is broken with pixman 0.21.2; GCC generates unaligned accesses
#SRCS+= pixman-sse2.c
COPTS.pixman-mmx.c= -mmmx -fvisibility=hidden
COPTS.pixman-sse2.c= -msse2 -fvisibility=hidden
MKDEPFLAGS+= -mmmx -msse2 -fvisibility=hidden
#COPTS.pixman-sse2.c= -msse2 -fvisibility=hidden
.endif
# .if VMX