Messages in this thread | | | Date | Thu, 5 Aug 2004 20:47:16 -0700 | From | "Randy.Dunlap" <> | Subject | Re: patch: linux-2.6.4/lib/int_sqrt.c long aware |
| |
| 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 - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |