------- Comment #8 from ubizjak at gmail dot com 2007-09-20 06:49 ------- I can't confirm the failure (make check from zlib works OK for me), but there is some suspicious code in inflate_fast(). When compiling (to be attached) preprocessed testcase (using -O2 -msse2 -ftree-vectorize on i686), I got:
8052711: 31 d2 xor %edx,%edx 8052713: 83 c2 01 add $0x1,%edx 8052716: f3 0f 6f 41 10 movdqu 0x10(%ecx),%xmm0 805271b: f3 0f 6f 51 20 movdqu 0x20(%ecx),%xmm2 8052720: f3 0f 6f 09 movdqu (%ecx),%xmm1 8052724: 66 0f 7f 40 11 movdqa %xmm0,0x11(%eax) 8052729: 66 0f 7f 48 01 movdqa %xmm1,0x1(%eax) 805272e: 66 0f 7f 50 21 movdqa %xmm2,0x21(%eax) 8052733: 83 c1 30 add $0x30,%ecx 8052736: 83 c0 30 add $0x30,%eax These lines correspond to line 235 of inffast.c: } while (len > 2) { PUP(out) = PUP(from); PUP(out) = PUP(from); PUP(out) = PUP(from); len -= 3; } These lines are preprocessed into: while (len > 2) { *++(out) = *++(from); *++(out) = *++(from); *++(out) = *++(from); len -= 3; } -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32893