I tried to find a helper function for bit count already available but
apparently I missed it :) No need for a new one if one exists already indeed.
-Toni
On Mon, Oct 15, 2018 at 07:59:58PM +, Roland Scheidegger wrote:
> Am 15.10.18 um 15:19 schrieb Toni Lönnberg:
> > ---
> > src/util/bitscan.h | 25 +
> > 1 file changed, 25 insertions(+)
> >
> > diff --git a/src/util/bitscan.h b/src/util/bitscan.h
> > index dc89ac9..cdfecaf 100644
> > --- a/src/util/bitscan.h
> > +++ b/src/util/bitscan.h
> > @@ -112,6 +112,31 @@ u_bit_scan64(uint64_t *mask)
> > return i;
> > }
> >
> > +/* Count bits set in mask */
> > +static inline int
> > +u_count_bits(unsigned *mask)
> I don't think you'd want to pass a pointer.
>
> Besides, I don't think we need another set of functions for this.
> src/util/u_math.h already has util_bitcount64 and util_bitcount which do
> the same thing.
> (Although I don't know which one is better, util_bitcount looks like it
> would be potentially faster with just very few bits set, but with
> "random" uint/uint64 it certainly would seem the new one is better. But
> in any case, can't beat the cpu popcount instruction...)
>
> Roland
>
>
> > +{
> > + unsigned v = *mask;
> > + int c;
> > + v = v - ((v >> 1) & 0x);
> > + v = (v & 0x) + ((v >> 2) & 0x);
> > + v = (v + (v >> 4)) & 0xF0F0F0F;
> > + c = (int)((v * 0x1010101) >> 24);
> > + return c;
> > +}
> > +
> > +static inline int
> > +u_count_bits64(uint64_t *mask)
> > +{
> > + uint64_t v = *mask;
> > + int c;
> > + v = v - ((v >> 1) & 0xull);
> > + v = (v & 0xull) + ((v >> 2) & 0xull);
> > + v = (v + (v >> 4)) & 0xF0F0F0F0F0F0F0Full;
> > + c = (int)((v * 0x101010101010101ull) >> 56);
> > + return c;
> > +}
> > +
> > /* Determine if an unsigned value is a power of two.
> > *
> > * \note
> >
>
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev