#include #include #include /* * This implements the binary GCD algorithm. (Often attributed to Stein, * but as Knuth has noted, appears in a first-century Chinese math text.) * * This is faster than the division-based algorithm even on x86, which * has decent hardware division. */ #if !defined(CONFIG_CPU_NO_EFFICIENT_FFS) && !defined(CPU_NO_EFFICIENT_FFS) /* If __ffs is available, the even/odd algorithm benchmarks slower. */ unsigned long gcd(unsigned long a, unsigned long b) { unsigned long r = a | b; if (!a || !b) return r; b >>= __ffs(b); if (b == 1) return r & -r; for (;;) { a >>= __ffs(a); if (a == 1) return r & -r; if (a == b) return a << __ffs(r); if (a < b) swap(a, b); a -= b; } } #else /* If normalization is done by loops, the even/odd algorithm is a win. */ unsigned long gcd(unsigned long a, unsigned long b) { unsigned long r = a | b; if (!a || !b) return r; /* Isolate lsbit of r */ r &= -r; while (!(b & r)) b >>= 1; if (b == r) return r; for (;;) { while (!(a & r)) a >>= 1; if (a == r) return r; if (a == b) return a; if (a < b) swap(a, b); a -= b; a >>= 1; if (a & r) a += b; a >>= 1; } } #endif EXPORT_SYMBOL_GPL(gcd); on> net-next plumbingsTobias Klauser
summaryrefslogtreecommitdiff
t'>Name
AgeCommit message (Collapse)AuthorFilesLines
Size
-rw-r--r--Kbuild468logplain
-rw-r--r--cxgb3-abi.h2291logplain
-rw-r--r--cxgb4-abi.h2488logplain
d---------hfi73logplain
-rw-r--r--hns-abi.h1795logplain
-rw-r--r--ib_user_cm.h6526logplain
-rw-r--r--ib_user_mad.h8791logplain
-rw-r--r--ib_user_sa.h2222logplain
-rw-r--r--ib_user_verbs.h21586logplain
-rw-r--r--mlx4-abi.h2864logplain
-rw-r--r--mlx5-abi.h7480logplain
-rw-r--r--mthca-abi.h2932logplain
-rw-r--r--nes-abi.h3380logplain
-rw-r--r--ocrdma-abi.h3918logplain
-rw-r--r--qedr-abi.h2559logplain
-rw-r--r--rdma_netlink.h4980logplain