http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47311

--- Comment #17 from Richard Henderson <rth at gcc dot gnu.org> 2011-01-17 
18:40:05 UTC ---
(In reply to comment #16)
> ==5267== Invalid read of size 8
> ==5267==    at 0x11E4E24: search_line_sse42(unsigned char const*, unsigned 

It's fine.  (1) Note that we've already verified above that the address is
aligned and (2) that we will in fact find the end-of-line marker that we
expect before we examine data beyond END.

I suppose valgrind expects us to update EDX in

>  454│   /* Main loop, processing 16 bytes at a time.  By doing the whole loop
>  455│      in inline assembly, we can make proper use of the flags set.  */
>  456│   __asm (      "sub $16, %1\n"
>  457│         "       .balign 16\n"
>  458│         "0:     add $16, %1\n"
>  459│         "       %vpcmpestri $0, (%1), %2\n"
>  460│         "       jnc 0b"
>  461│         : "=&c"(index), "+r"(s)
>  462├>        : "x"(search), "a"(4), "d"(16));

so that it can tell that we're examining only the first EDX bytes of the
value read, but that would require a bit of useless arithmetic here.

If there's some easy way we can add a valgrind exception for these
functions to the gcc source tree, I'd be open to do so.  But I also don't
want to figure out how to do that myself.

Reply via email to