This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug rtl-optimization/21150] Suboptimal byte extraction from 64bits
- From: "vda.linux at googlemail dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Fri, 15 Apr 2016 14:07:19 +0000
- Subject: [Bug rtl-optimization/21150] Suboptimal byte extraction from 64bits
- Auto-submitted: auto-generated
- References: <bug-21150-4 at http dot gcc dot gnu dot org/bugzilla/>
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.