This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug rtl-optimization/21150] Suboptimal byte extraction from 64bits


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

--- Comment #7 from Denis Vlasenko <vda.linux at googlemail dot com> ---
Fixed at least in 4.7.2, maybe earlier. With -m32 -fomit-frame-pointer -O2:

a:      movzbl  v+45, %eax
        xorb    v+36, %al
        xorb    v, %al
        xorb    v+54, %al
        xorb    v+63, %al
        xorb    v+9, %al
        xorb    v+18, %al
        xorb    v+27, %al
        ret
b:      movzbl  v+18, %eax
        xorb    v+9, %al
        xorb    v, %al
        xorb    v+27, %al
        xorb    v+36, %al
        xorb    v+45, %al
        xorb    v+54, %al
        xorb    v+63, %al
        ret
c:      movzbl  v+9, %eax
        xorb    v, %al
        xorb    v+18, %al
        xorb    v+27, %al
        xorb    v+36, %al
        xorb    v+45, %al
        xorb    v+54, %al
        xorb    v+63, %al
        ret
d:      movzbl  v+18, %eax
        xorb    v+9, %al
        xorb    v, %al
        xorb    v+27, %al
        xorb    v+36, %al
        xorb    v+45, %al
        xorb    v+54, %al
        xorb    v+63, %al
        ret

With same but -Os, my only complaint is that word-sized XORs are needlessly
adding partial register update stalls:

d:      movb    v+18, %al
        xorb    v+9, %al
        xorl    v, %eax
        xorb    v+27, %al
        xorl    v+36, %eax
        xorb    v+45, %al
        xorb    v+54, %al
        xorb    v+63, %al
        ret

but overall it looks much better. Feel free to close this BZ.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]