* Re: patch: linux-2.6.4/lib/int_sqrt.c long aware
[not found] <20040805173023.175a77f8.rddunlap@osdl.org>
@ 2004-08-06 3:47 ` Randy.Dunlap
0 siblings, 0 replies; 2+ messages in thread
From: Randy.Dunlap @ 2004-08-06 3:47 UTC (permalink / raw)
To: lkml; +Cc: WHarms
| From: <> (Walter Harms)
|
| hi list,
| this patch make int_sqrt() handle long properly. i tested it
| on my alpha and i386. also some comparision again an alternativ int_sqrt() code.
| The placement (and using) of 'tmp' is a bit odd but faster (on alpha, no matter on i386).
|
| happy hacking,
| walter
|
| ps: i must use c&p so be aware of possible tab->space translations
|
|
| --- linux-2.6.4/lib/int_sqrt.c.org 2004-03-21 12:58:55.783035928 +0100
| +++ linux-2.6.4/lib/int_sqrt.c 2004-03-21 13:16:20.999138928 +0100
| @@ -10,22 +10,23 @@
| */
| unsigned long int_sqrt(unsigned long x)
| {
| - unsigned long op, res, one;
| + unsigned long op, res, one,tmp;
|
| op = x;
| res = 0;
|
| - one = 1 << 30;
| + one = 1UL << (BITS_PER_LONG-2);
| while (one > op)
| one >>= 2;
|
| while (one != 0) {
| + tmp=res + one;
| if (op >= res + one) {
| - op = op - (res + one);
| - res = res + 2 * one;
| + op = op - tmp;
| + res = tmp + one;
| }
| - res /= 2;
| - one /= 4;
| + res >>= 1;
| + one >>= 2;
| }
| return res;
| }
Hi Walter,
I found a little time to play with this. I only tested it on
a P4 UP machine (via userspace app).
It does indeed speed up integer sqrt typically by around 3% for me.
--
~Randy
^ permalink raw reply [flat|nested] 2+ messages in thread
* patch: linux-2.6.4/lib/int_sqrt.c long aware
@ 2004-04-03 11:16 Walter Harms
0 siblings, 0 replies; 2+ messages in thread
From: Walter Harms @ 2004-04-03 11:16 UTC (permalink / raw)
To: linux-kernel
hi list,
this patch make int_sqrt() handle long properly. i tested it
on my alpha and i386. also some comparision again an alternativ int_sqrt() code.
The placement (and using) of 'tmp' is a bit odd but faster (on alpha, no matter on i386).
happy hacking,
walter
ps: i must use c&p so be aware of possible tab->space translations
--- linux-2.6.4/lib/int_sqrt.c.org 2004-03-21 12:58:55.783035928 +0100
+++ linux-2.6.4/lib/int_sqrt.c 2004-03-21 13:16:20.999138928 +0100
@@ -10,22 +10,23 @@
*/
unsigned long int_sqrt(unsigned long x)
{
- unsigned long op, res, one;
+ unsigned long op, res, one,tmp;
op = x;
res = 0;
- one = 1 << 30;
+ one = 1UL << (BITS_PER_LONG-2);
while (one > op)
one >>= 2;
while (one != 0) {
+ tmp=res + one;
if (op >= res + one) {
- op = op - (res + one);
- res = res + 2 * one;
+ op = op - tmp;
+ res = tmp + one;
}
- res /= 2;
- one /= 4;
+ res >>= 1;
+ one >>= 2;
}
return res;
}
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2004-08-06 3:56 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <20040805173023.175a77f8.rddunlap@osdl.org>
2004-08-06 3:47 ` patch: linux-2.6.4/lib/int_sqrt.c long aware Randy.Dunlap
2004-04-03 11:16 Walter Harms
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®