[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <45EDB568.1090008@zytor.com>
Date: Tue, 06 Mar 2007 10:39:36 -0800
From: "H. Peter Anvin" <hpa@...or.com>
To: David Howells <dhowells@...hat.com>
CC: torvalds@...l.org, akpm@...l.org, benh@...nel.crashing.org,
linux-kernel@...r.kernel.org, johannes@...solutions.net
Subject: Re: [PATCH] Fix get_order() [try #2]
David Howells wrote:
>
> /**
> + * ilog2_up - rounded up log of base 2 of 32-bit or a 64-bit unsigned value
> + * @n - parameter
> + *
> + * constant-capable log of base 2 calculation
> + * - this can be used to initialise global variables from constant data, hence
> + * the massive ternary operator construction
> + * - the result is rounded up
> + * - the result is undefined when n < 1
> + *
> + * selects the appropriately-sized optimised version depending on sizeof(n)
> + */
> +#define ilog2_up(n) ((n) == 1 ? 0 : ilog2((n) - 1) + 1)
> +
Why not just make it ((n) < 1 ? 0 : ...) and make it well-defined for
n == 0?
> +/**
> * roundup_pow_of_two - round the given value up to nearest power of two
> * @n - parameter
> *
> @@ -159,8 +175,8 @@ unsigned long __roundup_pow_of_two(unsigned long n)
> #define roundup_pow_of_two(n) \
> ( \
> __builtin_constant_p(n) ? ( \
> - (n == 1) ? 0 : \
> - (1UL << (ilog2((n) - 1) + 1)) \
> + (n == 1) ? 1 : \
> + (1UL << ilog2_up(n)) \
> ) : \
... then this can be just "1UL << ilog2_up(n)".
[Sorry about previous email. I got confused about what
roundup_pow_of_two() actually does.]
-hpa
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists