Branch data Line data Source code
1 : : /*
2 : : * Copyright (C) 2013 Davidlohr Bueso <davidlohr.bueso@hp.com>
3 : : *
4 : : * Based on the shift-and-subtract algorithm for computing integer
5 : : * square root from Guy L. Steele.
6 : : */
7 : :
8 : : #include <linux/kernel.h>
9 : : #include <linux/export.h>
10 : :
11 : : /**
12 : : * int_sqrt - rough approximation to sqrt
13 : : * @x: integer of which to calculate the sqrt
14 : : *
15 : : * A very rough approximation to the sqrt() function.
16 : : */
17 : 0 : unsigned long int_sqrt(unsigned long x)
18 : : {
19 : : unsigned long b, m, y = 0;
20 : :
21 [ + + ]: 11990012 : if (x <= 1)
22 : : return x;
23 : :
24 : : m = 1UL << (BITS_PER_LONG - 2);
25 [ + ]: 201914674 : while (m != 0) {
26 : 190035136 : b = y + m;
27 : 190035136 : y >>= 1;
28 : :
29 [ + + ]: 190035136 : if (x >= b) {
30 : 56068178 : x -= b;
31 : 56068178 : y += m;
32 : : }
33 : 190035136 : m >>= 2;
34 : : }
35 : :
36 : : return y;
37 : : }
38 : : EXPORT_SYMBOL(int_sqrt);
|