public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug rtl-optimization/21150] New: Suboptimal byte extraction from larger integers
@ 2005-04-21 13:10 vda at port dot imtp dot ilyichevsk dot odessa dot ua
2005-04-21 13:13 ` [Bug rtl-optimization/21150] " vda at port dot imtp dot ilyichevsk dot odessa dot ua
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: vda at port dot imtp dot ilyichevsk dot odessa dot ua @ 2005-04-21 13:10 UTC (permalink / raw)
To: gcc-bugs
Bytes are typically extracted from e.g. u64's by something like
#define D5(v) (((v) >> 40) & 0xff)
Testcase shows that gcc does not optimize this "good enough".
--
Summary: Suboptimal byte extraction from larger integers
Product: gcc
Version: 3.4.3
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: rtl-optimization
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: vda at port dot imtp dot ilyichevsk dot odessa dot ua
CC: gcc-bugs at gcc dot gnu dot org
GCC build triplet: i386-pc-linux-gnu
GCC host triplet: i386-pc-linux-gnu
GCC target triplet: i386-pc-linux-gnu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21150
^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug rtl-optimization/21150] Suboptimal byte extraction from larger integers
2005-04-21 13:10 [Bug rtl-optimization/21150] New: Suboptimal byte extraction from larger integers vda at port dot imtp dot ilyichevsk dot odessa dot ua
@ 2005-04-21 13:13 ` vda at port dot imtp dot ilyichevsk dot odessa dot ua
2005-04-21 13:19 ` [Bug rtl-optimization/21150] Suboptimal byte extraction from 64bits pinskia at gcc dot gnu dot org
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: vda at port dot imtp dot ilyichevsk dot odessa dot ua @ 2005-04-21 13:13 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From vda at port dot imtp dot ilyichevsk dot odessa dot ua 2005-04-21 13:12 -------
Created an attachment (id=8701)
--> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=8701&action=view)
generate assembly with -S and compare results
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21150
^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug rtl-optimization/21150] Suboptimal byte extraction from 64bits
2005-04-21 13:10 [Bug rtl-optimization/21150] New: Suboptimal byte extraction from larger integers vda at port dot imtp dot ilyichevsk dot odessa dot ua
2005-04-21 13:13 ` [Bug rtl-optimization/21150] " vda at port dot imtp dot ilyichevsk dot odessa dot ua
@ 2005-04-21 13:19 ` pinskia at gcc dot gnu dot org
2005-04-24 13:26 ` vda at port dot imtp dot ilyichevsk dot odessa dot ua
2005-07-04 22:21 ` pinskia at gcc dot gnu dot org
3 siblings, 0 replies; 5+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2005-04-21 13:19 UTC (permalink / raw)
To: gcc-bugs
--
What |Removed |Added
----------------------------------------------------------------------------
Keywords| |missed-optimization
Summary|Suboptimal byte extraction |Suboptimal byte extraction
|from larger integers |from 64bits
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21150
^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug rtl-optimization/21150] Suboptimal byte extraction from 64bits
2005-04-21 13:10 [Bug rtl-optimization/21150] New: Suboptimal byte extraction from larger integers vda at port dot imtp dot ilyichevsk dot odessa dot ua
2005-04-21 13:13 ` [Bug rtl-optimization/21150] " vda at port dot imtp dot ilyichevsk dot odessa dot ua
2005-04-21 13:19 ` [Bug rtl-optimization/21150] Suboptimal byte extraction from 64bits pinskia at gcc dot gnu dot org
@ 2005-04-24 13:26 ` vda at port dot imtp dot ilyichevsk dot odessa dot ua
2005-07-04 22:21 ` pinskia at gcc dot gnu dot org
3 siblings, 0 replies; 5+ messages in thread
From: vda at port dot imtp dot ilyichevsk dot odessa dot ua @ 2005-04-24 13:26 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From vda at port dot imtp dot ilyichevsk dot odessa dot ua 2005-04-24 13:26 -------
I don't think that bug description is correct.
I believe similar observation will be valid for byte extraction
from u32 and u16, and for u16-from-u32, etc.
Update for latest gcc.
This is what 4.0.0 produces from the testcase:
# gcc -O2 -fomit-frame-pointer -S helper.c
# cat helper.s
[I removed non-essential stuff]
a:
movl v+8, %eax
shrl $8, %eax
xorb v, %al
xorb v+18, %al
xorb v+27, %al
xorb v+36, %al
movl v+40, %edx
movl v+44, %ecx
movl %ecx, %edx
xorl %ecx, %ecx
shrl $8, %edx
xorl %edx, %eax
xorb v+54, %al
xorb v+63, %al
movzbl %al, %eax
ret
b:
movl v+8, %eax
movl v+12, %edx
shrdl $8, %edx, %eax
shrl $8, %edx
xorb v, %al
movl v+16, %edx
movl v+20, %ecx
shrdl $16, %ecx, %edx
shrl $16, %ecx
xorl %edx, %eax
movl v+24, %edx
movl v+28, %ecx
shrdl $24, %ecx, %edx
shrl $24, %ecx
xorl %edx, %eax
xorb v+36, %al
movl v+40, %edx
movl v+44, %ecx
movl %ecx, %edx
xorl %ecx, %ecx
shrl $8, %edx
xorl %edx, %eax
xorb v+54, %al
xorb v+63, %al
movzbl %al, %eax
ret
c:
movb v+9, %al
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
movzbl %al, %eax
ret
d:
movl v+8, %eax
movl v+12, %edx
shrdl $8, %edx, %eax
shrl $8, %edx
xorb v, %al
movl v+16, %edx
movl v+20, %ecx
shrdl $16, %ecx, %edx
shrl $16, %ecx
xorl %edx, %eax
movl v+24, %edx
movl v+28, %ecx
shrdl $24, %ecx, %edx
shrl $24, %ecx
xorl %edx, %eax
xorb v+36, %al
movl v+40, %edx
movl v+44, %ecx
movl %ecx, %edx
xorl %ecx, %ecx
shrl $8, %edx
xorl %edx, %eax
xorb v+54, %al
xorb v+63, %al
movzbl %al, %eax
ret
As you can see, a,b and d results are far from optimal,
while c is almost perfect.
Note that people typically use d, i.e. this:
#define D7(v) (((v) >> 56))
#define D6(v) (((v) >> 48) & 0xff)
#define D5(v) (((v) >> 40) & 0xff)
#define D4(v) (((v) >> 32) & 0xff)
#define D3(v) (((v) >> 24) & 0xff)
#define D2(v) (((v) >> 16) & 0xff)
#define D1(v) (((v) >> 8) & 0xff)
#define D0(v) ((v) & 0xff)
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21150
^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug rtl-optimization/21150] Suboptimal byte extraction from 64bits
2005-04-21 13:10 [Bug rtl-optimization/21150] New: Suboptimal byte extraction from larger integers vda at port dot imtp dot ilyichevsk dot odessa dot ua
` (2 preceding siblings ...)
2005-04-24 13:26 ` vda at port dot imtp dot ilyichevsk dot odessa dot ua
@ 2005-07-04 22:21 ` pinskia at gcc dot gnu dot org
3 siblings, 0 replies; 5+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2005-07-04 22:21 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From pinskia at gcc dot gnu dot org 2005-07-04 22:21 -------
Confirmed, this is most likely a sub register problem.
--
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Ever Confirmed| |1
Last reconfirmed|0000-00-00 00:00:00 |2005-07-04 22:21:33
date| |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21150
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2005-07-04 22:21 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-04-21 13:10 [Bug rtl-optimization/21150] New: Suboptimal byte extraction from larger integers vda at port dot imtp dot ilyichevsk dot odessa dot ua
2005-04-21 13:13 ` [Bug rtl-optimization/21150] " vda at port dot imtp dot ilyichevsk dot odessa dot ua
2005-04-21 13:19 ` [Bug rtl-optimization/21150] Suboptimal byte extraction from 64bits pinskia at gcc dot gnu dot org
2005-04-24 13:26 ` vda at port dot imtp dot ilyichevsk dot odessa dot ua
2005-07-04 22:21 ` pinskia at gcc dot gnu dot org
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).