------- 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

Reply via email to