tech-kern archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: kernel bitreverse function
On Sat, Apr 02, 2011 at 11:31:15PM +0200, Joerg Sonnenberger wrote:
> On Sat, Apr 02, 2011 at 11:11:39PM +0200, Frank Wille wrote:
> > is there already a global function to reverse the bits in a byte?
>
> I don't think so.
>
> > If not, wouldn't it be useful to put an optimized function (e.g. with
> > a 256-byte lookup-table, or 16-byte for the two nibbles to save space)
> > into the kernel, or into libkern?
>
> Depending on the platform, one of the approaches from
> http://graphics.stanford.edu/~seander/bithacks.html#BitReverseTable
> makes sense.
Indeed, either:
((b * 0x80200802ull) & 0x0884422110ull) * 0x0101010101ull >> 32
or
((b * 0x0802u & 0x22110u) | (b * 0x8020u & 0x88440u)) * 0x10101u >> 16
are probably best - probably the 2nd since it avoids a 64x64 multiply.
(Both the above need the result masking to 8 bits.)
The lookup table versions suffer from being a data cache miss!
It is also worth allowing for cpus that can have a hardware instruction
(and then do it in 1 clock!)
David
--
David Laight: david%l8s.co.uk@localhost
Home |
Main Index |
Thread Index |
Old Index