https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85637

--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> ---
__restrict should work fine for char pointers.  With

        __attribute__((noinline))
        void Update(const void* __restrict b, unsigned int len)
        {
                if (len) {
...

I get with -O2

_ZN7Adler326UpdateEi:
.LFB3:
        .cfi_startproc
        movzbl  %sil, %esi
        addl    (%rdi), %esi
        movl    $-2146992015, %ecx
        movl    4(%rdi), %r8d
        movl    %esi, %eax
        addl    %esi, %r8d
        mull    %ecx
        movl    %r8d, %eax
        shrl    $15, %edx
        imull   $65521, %edx, %edx
        subl    %edx, %esi
        mull    %ecx
        movl    %esi, (%rdi)
        movl    %edx, %ecx
        shrl    $15, %ecx
        imull   $65521, %ecx, %ecx
        subl    %ecx, %r8d
        movl    %r8d, 4(%rdi)
        ret

Reply via email to