Mesa (master): gallium/util: add u_bit_consecutive for generating a consecutive range of bits

Nicolai Hähnle nh at kemper.freedesktop.org
Wed Apr 27 16:16:54 UTC 2016


Module: Mesa
Branch: master
Commit: 91fb4bb2e999accfca3394a5720516d03868c521
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=91fb4bb2e999accfca3394a5720516d03868c521

Author: Nicolai Hähnle <nicolai.haehnle at amd.com>
Date:   Fri Apr 22 12:48:19 2016 -0500

gallium/util: add u_bit_consecutive for generating a consecutive range of bits

There are some undefined behavior subtleties, so having a function to match
the u_bit_scan_consecutive_range makes sense.

Reviewed-by: Marek Olšák <marek.olsak at amd.com>

---

 src/gallium/auxiliary/util/u_math.h | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/src/gallium/auxiliary/util/u_math.h b/src/gallium/auxiliary/util/u_math.h
index 4e58e50..ecb1d63 100644
--- a/src/gallium/auxiliary/util/u_math.h
+++ b/src/gallium/auxiliary/util/u_math.h
@@ -545,6 +545,18 @@ u_bit_scan_consecutive_range64(uint64_t *mask, int *start, int *count)
    *mask &= ~(((1llu << *count) - 1) << *start);
 }
 
+/* Returns a bitfield in which the first count bits starting at start are
+ * set.
+ */
+static inline unsigned
+u_bit_consecutive(unsigned start, unsigned count)
+{
+   assert(start + count <= 32);
+   if (count == 32)
+      return ~0;
+   return ((1u << count) - 1) << start;
+}
+
 /**
  * Return float bits.
  */




More information about the mesa-commit mailing list