mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/
synced 2026-09-16 18:15:52 +00:00
This facility provides three entry points:
ilog2() Log base 2 of unsigned long
ilog2_u32() Log base 2 of u32
ilog2_u64() Log base 2 of u64
These facilities can either be used inside functions on dynamic data:
int do_something(long q)
{
...;
y = ilog2(x)
...;
}
Or can be used to statically initialise global variables with constant values:
unsigned n = ilog2(27);
When performing static initialisation, the compiler will report "error:
initializer element is not constant" if asked to take a log of zero or of
something not reducible to a constant. They treat negative numbers as
unsigned.
When not dealing with a constant, they fall back to using fls() which permits
them to use arch-specific log calculation instructions - such as BSR on
x86/x86_64 or SCAN on FRV - if available.
[akpm@osdl.org: MMC fix]
Signed-off-by: David Howells <dhowells@redhat.com>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Herbert Xu <herbert@gondor.apana.org.au>
Cc: David Howells <dhowells@redhat.com>
Cc: Wojtek Kaniewski <wojtekka@toxygen.net>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
|
History
|
|
|---|---|---|
| .. | ||
| arc | ||
| au1000 | ||
| basler/excite | ||
| boot | ||
| cobalt | ||
| configs | ||
| ddb5xxx | ||
| dec | ||
| emma2rh | ||
| gt64120 | ||
| jazz | ||
| jmr3927 | ||
| kernel | ||
| lasat | ||
| lib | ||
| lib-32 | ||
| lib-64 | ||
| math-emu | ||
| mips-boards | ||
| mm | ||
| momentum | ||
| oprofile | ||
| pci | ||
| philips/pnx8550 | ||
| pmc-sierra | ||
| qemu | ||
| sgi-ip22 | ||
| sgi-ip27 | ||
| sgi-ip32 | ||
| sibyte | ||
| sni | ||
| tx4927 | ||
| tx4938 | ||
| vr41xx | ||
| defconfig | ||
| Kconfig | ||
| Kconfig.debug | ||
| Makefile | ||