On Mon, 2015-02-02 at 09:12 -0800, Anshul Garg wrote: > From: Anshul Garg <aksgarg1...@gmail.com> > > Unnecessary instructions are executing even though m is > greater than x so added logic to make m less than equal to > x before performing these operations. > > Signed-off-by: Anshul Garg <aksgarg1...@gmail.com> > --- > lib/int_sqrt.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/lib/int_sqrt.c b/lib/int_sqrt.c [] > @@ -22,6 +22,9 @@ unsigned long int_sqrt(unsigned long x) > return x; > > m = 1UL << (BITS_PER_LONG - 2); > + > + while (m > x) > + m >>= 2;
Perhaps removing the while and using fls(x) would be better. Perhaps something like: m = 1UL << min(sizeof(unsigned long) == sizeof(u64) ? fls64(x) : fls(x), BITS_PER_LONG - 2); > while (m != 0) { > b = y + m; > y >>= 1; -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/