mesa: Add a BITSET_FFS function.
authorFrancisco Jerez <currojerez@riseup.net>
Tue, 2 Feb 2010 11:07:08 +0000 (03:07 -0800)
committerBrian Paul <brianp@vmware.com>
Tue, 2 Feb 2010 15:53:57 +0000 (08:53 -0700)
It will be useful for the nouveau DRI driver and IMHO there's no
reason to keep it private.

Signed-off-by: Brian Paul <brianp@vmware.com>
src/mesa/main/bitset.h

index 8bd4526cb6fcb4049cd03cf01b7d2b210fee08fe..f2709abc9fd06cc5e1328cb5c6b7e089ea6efe4b 100644 (file)
  * \brief Bitset of arbitrary size definitions.
  * \author Michal Krol
  */
+
+#ifndef BITSET_H
+#define BITSET_H
+
+#include "imports.h"
+
 /****************************************************************************
  * generic bitset implementation
  */
    ((x)[BITSET_BITWORD(b)] &= ~BITSET_RANGE(b, e)) : \
    (assert (!"BITSET_CLEAR_RANGE: bit range crosses word boundary"), 0))
 
+/* Get first bit set in a bitset.
+ */
+static INLINE int
+__bitset_ffs(const BITSET_WORD *x, int n)
+{
+   int i;
+
+   for (i = 0; i < n; i++) {
+      if (x[i])
+        return _mesa_ffs(x[i]) + BITSET_WORDBITS * i;
+   }
+
+   return 0;
+}
+
+#define BITSET_FFS(x) __bitset_ffs(x, Elements(x))
+
 /****************************************************************************
  * 64-bit bitset implementation
  */
    ((x)[BITSET64_BITWORD(b)] &= ~BITSET64_RANGE(b, e)) : \
    (assert (!"BITSET64_CLEAR_RANGE: bit range crosses word boundary"), 0))
 
+#endif