From: vignesh babu <vignesh.babu@wipro.com>
To: kernel-janitors@vger.kernel.org
Subject: [KJ] rounddown_pow_of_2 inclusion into log2.h
Date: Tue, 14 Aug 2007 09:14:59 +0000 [thread overview]
Message-ID: <1187082179.3874.18.camel@merlin.linuxcoe.com> (raw)
rday,
Any plans on including what Andrew Morton suggested in the near
future?
Think you have had enough time to convince yourself ;)
(Sorry, had put kj in bcc in prev mail by mistake)
Vignesh
On Thu, 25 Jan 2007, Andrew Morton wrote:
> On Thu, 25 Jan 2007 04:32:12 -0500 (EST)
> "Robert P. J. Day" <rpjday@mindspring.com> wrote:
> > +/*
> > + * round down to nearest power of two
> > + */
> > +static inline __attribute__((const))
> > +unsigned long __rounddown_pow_of_two(unsigned long n)
> > +{
> > + return 1UL << (fls_long(n) - 1);
> > +}
>
> So __rounddown_pow_of_two(16) returns 8?
it does? but if that was true, so would 17, and 18, and 19 ... i
didn't actually test this since it seemed so straightforward.
doesn't fls_long() return the most significant bit? oh, wait ...
reading further ...
>
> > /**
> > * ilog2 - log of base 2 of 32-bit or a 64-bit unsigned value
> > * @n - parameter
> > @@ -154,4 +174,20 @@ unsigned long __roundup_pow_of_two(unsigned
long n)
> > __roundup_pow_of_two(n) \
> > )
> >
> > +/**
> > + * rounddown_pow_of_two - round the given value down to nearest
power of two
> > + * @n - parameter
> > + *
> > + * round the given value down to the nearest power of two
> > + * - the result is undefined when n = 0
> > + * - this can be used to initialise global variables from constant
data
> > + */
> > +#define rounddown_pow_of_two(n) \
> > +( \
> > + __builtin_constant_p(n) ? ( \
> > + (n = 1) ? 0 : \
> > + (1UL << ilog2(n)) : \
> > + __rounddown_pow_of_two(n) \
> > + )
>
> But (1UL << ilog2(16)) returns 16?
>
>
> And, afiact, your __rounddown_pow_of_two() is basically equivalent to
(1UL
> << ilog2(n)) anyway. So a suitable (and less buggy) implementation
might be
>
> static inline unsigned long rounddown_pow_of_two(unsigned long n)
> {
> return (n = 1) ? 0 : (1UL << ilog2(n));
> }
i think you're right. it's been a long day so give me a few minutes
to convince myself.
rday
--
====================================
Robert P. J. Day
Linux Consulting, Training and Annoying Kernel Pedantry
Waterloo, Ontario, CANADA
--
Vignesh Babu BM
_____________________________________________________________
"Why is it that every time I'm with you, makes me believe in magic?"
_______________________________________________
REMINDER: this mailing list moved to vger.kernel.org and current one will be discontinued soon.
To resubscribe, send email to majordomo@vger.kernel.org with
"subscribe kernel-janitors" in message body and follow instructions.
Kernel-janitors mailing list
Kernel-janitors@lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/kernel-janitors
reply other threads:[~2007-08-14 9:14 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1187082179.3874.18.camel@merlin.linuxcoe.com \
--to=vignesh.babu@wipro.com \
--cc=kernel-janitors@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.