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

--- Comment #4 from Uroš Bizjak <ubizjak at gmail dot com> ---
clang generates for x86_64:

        movzbl  (%rsi), %eax
        shlq    $4, %rax
        movl    16(%rdi,%rax), %eax
        movl    %eax, (%rdx)
        retq

and for i?86:

        movl    8(%esp), %edx
        movl    4(%esp), %ecx
        movl    12(%esp), %eax
        movzbl  (%edx), %edx
        shll    $4, %edx
        movl    16(%ecx,%edx), %ecx
        movl    %ecx, (%eax)
        retl

for the later case (-m32), gcc generates:

        movl    8(%esp), %eax
        movzbl  (%eax), %eax
        addl    $1, %eax
        sall    $4, %eax
        addl    4(%esp), %eax
        movl    (%eax), %edx
        movl    12(%esp), %eax
        movl    %edx, (%eax)
        ret

so, two extra additions.

Reply via email to