From: Harvey Harrison <harvey.harrison@gmail.com>
To: Jeff Garzik <jeff@garzik.org>, Alan Cox <alan@lxorguk.ukuu.org.uk>
Cc: Andrew Morton <akpm@linux-foundation.org>,
linux-ide <linux-ide@vger.kernel.org>
Subject: [RFC-UGLYPATCH] ata: small optimization in linux/libata.h
Date: Thu, 14 Feb 2008 11:16:18 -0800 [thread overview]
Message-ID: <1203016578.2748.69.camel@brick> (raw)
This patch may be too ugly to live, it suppresses a lot of
sparse warnings in the libata build and produces slightly
tighter code. (4 instructions vs 5 and a few bytes saved).
include/linux/libata.h:1214:13: warning: potentially expensive pointer subtraction
Original:
if (++link - ap->pmp_link < ap->nr_pmp_links)
return link;
52b: 89 d8 mov %ebx,%eax
52d: 2b 82 60 26 00 00 sub 0x2660(%edx),%eax
533: c1 f8 02 sar $0x2,%eax
536: 69 c0 dd 3d c8 44 imul $0x44c83ddd,%eax,%eax
53c: 3b 82 5c 26 00 00 cmp 0x265c(%edx),%eax
542: 7d 04 jge 548 <sata_pmp_detach+0xbe>
Next:
if ((char*)++link - (char *)ap->pmp_link < ap->nr_pmp_links * sizeof(*link))
return link;
52b: 69 81 5c 26 00 00 d4 imul $0x9d4,0x265c(%ecx),%eax
532: 09 00 00
535: 89 da mov %ebx,%edx
537: 2b 91 60 26 00 00 sub 0x2660(%ecx),%edx
53d: 39 c2 cmp %eax,%edx
53f: 73 04 jae 545 <sata_pmp_detach+0xbb>
Signed-off-by: Harvey Harrison <harvey.harrison@gmail.com>
---
I know it's ugly, but I had it done anyways. The one real problem I have
with it is that if link and ap->pmp_link ever get changed to different types
the compiler will not even warn as we cast away to (char *). To make it
a bit more robust, a BUILD_BUG_ON checking the pointer types may be a
good idea.
include/linux/libata.h | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/include/linux/libata.h b/include/linux/libata.h
index 2845983..f0e1178 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
@@ -1211,7 +1211,7 @@ static inline struct ata_link *ata_port_next_link(struct ata_link *link)
return ap->pmp_link;
}
- if (++link - ap->pmp_link < ap->nr_pmp_links)
+ if ((char*)++link - (char *)ap->pmp_link < ap->nr_pmp_links * sizeof(*link))
return link;
return NULL;
}
--
1.5.4.1.1278.gc75be
next reply other threads:[~2008-02-14 19:16 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-02-14 19:16 Harvey Harrison [this message]
2008-02-14 23:39 ` [RFC-UGLYPATCH] ata: small optimization in linux/libata.h Tejun Heo
2008-02-15 0:05 ` Harvey Harrison
2008-02-15 1:58 ` Tejun Heo
2008-02-15 8:56 ` Mikael Pettersson
2008-02-15 16:10 ` Jeff Garzik
2008-02-15 21:32 ` Christer Weinigel
2008-02-15 21:41 ` [PATCH] ata: fix sparse warning in libata.h Harvey Harrison
2008-02-15 22:18 ` Tejun Heo
2008-02-20 17:12 ` Jeff Garzik
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1203016578.2748.69.camel@brick \
--to=harvey.harrison@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=jeff@garzik.org \
--cc=linux-ide@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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 NNTP newsgroup(s).