Re: [patch] arca-vm-2.2.5

Gabriel Paubert
1999-04-07T16:03:53Z

On Tue, 6 Apr 1999, David Miller wrote:

> Date: Wed, 7 Apr 1999 00:49:18 +0200 (CEST)
> From: Ingo Molnar <mingo@chiara.csoma.elte.hu>
>
> It should be 'inode >> 8' (which is done by the log2
> solution). Unless i'm misunderstanding something.
>
> Consider that:
>
> (((unsigned long) inode) >> (sizeof(struct inode) & ~ (sizeof(struct inode) - 1)))
>
> sort of approximates this and avoids the funny looking log2 macro. :-)

May I disagree ? Compute this expression in the case sizeof(struct inode)
is a large power of 2. Say 0x100, the shift count becomes (0x100 & ~0xff),
or 0x100. Shifts by amounts larger than or equal to the word size are
undefined in C AFAIR (and in practice on most architectures which take
the shift count modulo some power of 2).

I have needed quite often a log2 estimate of integer values but I don't
know of any tricks or expression to make it fast on machines which don't
have an instruction which counts the number of most significant zero bits.
It is trivial to count the number of least significant zero bits if you
have an instruction which counts the most significant zero bits, but not
the other way around.

Regards,
Gabriel.