summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/mesa/main/imports.c28
1 files changed, 18 insertions, 10 deletions
diff --git a/src/mesa/main/imports.c b/src/mesa/main/imports.c
index ad77373075b..be2f04c1881 100644
--- a/src/mesa/main/imports.c
+++ b/src/mesa/main/imports.c
@@ -574,28 +574,36 @@ _mesa_ffs(int i)
#endif
}
+
+/**
+ * Find position of first bit set in given value.
+ * XXX Warning: this function can only be used on 64-bit systems!
+ * \return position of lest significant bit set, starting at 1, return zero
+ * if no bits set.
+ */
int
_mesa_ffsll(long long val)
{
#ifdef ffsll
- return ffsll(val);
+ return ffsll(val);
#else
- int bit;
+ int bit;
- assert(sizeof(val) == 8);
+ assert(sizeof(val) == 8);
- bit = ffs(val);
- if (bit != 0)
- return bit;
+ bit = ffs(val);
+ if (bit != 0)
+ return bit;
- bit = ffs(val >> 32);
- if (bit != 0)
- return 32 + bit;
+ bit = ffs(val >> 32);
+ if (bit != 0)
+ return 32 + bit;
- return 0;
+ return 0;
#endif
}
+
/**
* Return number of bits set in given GLuint.
*/