From: Eric Dumazet <dada1@cosmosbay.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Linux kernel <linux-kernel@vger.kernel.org>
Subject: [PATCH] lib/extable.c : Removes an expensive integer divide in search_extable()
Date: Tue, 18 Dec 2007 22:53:47 +0100 [thread overview]
Message-ID: <4768416B.5030103@cosmosbay.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 1394 bytes --]
Actual code let compiler generates idiv instruction on x86.
Using a right shift is OK here and readable as well.
Before patch
10: 57 push %edi
11: 56 push %esi
12: 89 d6 mov %edx,%esi
14: 53 push %ebx
15: 89 c3 mov %eax,%ebx
17: eb 22 jmp 3b <search_extable+0x2b>
19: 89 f0 mov %esi,%eax
1b: ba 02 00 00 00 mov $0x2,%edx
20: 29 d8 sub %ebx,%eax
22: 89 d7 mov %edx,%edi
24: c1 f8 03 sar $0x3,%eax
27: 99 cltd
28: f7 ff idiv %edi
2a: 8d 04 c3 lea (%ebx,%eax,8),%eax
2d: 39 08 cmp %ecx,(%eax)
...
After patch
00000010 <search_extable>:
10: 53 push %ebx
11: 89 c3 mov %eax,%ebx
13: eb 18 jmp 2d <search_extable+0x1d>
15: 89 d0 mov %edx,%eax
17: 29 d8 sub %ebx,%eax
19: c1 f8 04 sar $0x4,%eax
1c: 8d 04 c3 lea (%ebx,%eax,8),%eax
1f: 39 08 cmp %ecx,(%eax)
...
Signed-off-by: Eric Dumazet <dada1@cosmosbay.com>
[-- Attachment #2: extable.patch --]
[-- Type: text/plain, Size: 560 bytes --]
diff --git a/lib/extable.c b/lib/extable.c
index 463f456..179c087 100644
--- a/lib/extable.c
+++ b/lib/extable.c
@@ -57,10 +57,10 @@ search_extable(const struct exception_table_entry *first,
while (first <= last) {
const struct exception_table_entry *mid;
- mid = (last - first) / 2 + first;
+ mid = ((last - first) >> 1) + first;
/*
- * careful, the distance between entries can be
- * larger than 2GB:
+ * careful, the distance between value and insn
+ * can be larger than MAX_LONG:
*/
if (mid->insn < value)
first = mid + 1;
reply other threads:[~2007-12-18 21:54 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
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=4768416B.5030103@cosmosbay.com \
--to=dada1@cosmosbay.com \
--cc=akpm@linux-foundation.org \
--cc=linux-kernel@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.