From: | Jeremy Kerr <jk(at)ozlabs(dot)org> |
---|---|
To: | <pgsql-hackers(at)postgresql(dot)org> |
Cc: | Atsushi Ogawa <a_ogawa(at)hi-ho(dot)ne(dot)jp> |
Subject: | [PATCH 1/2] Add bit operations util header |
Date: | 2009-06-02 15:44:39 |
Message-ID: | 1243957479.379462.496709474029.1.gpush@pingu |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Add a utility header for simple bit operatios - bitops.h.
At present, just contains the fls() (find last set bit) function.
Signed-off-by: Jeremy Kerr <jk(at)ozlabs(dot)org>
---
src/include/utils/bitops.h | 52 +++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 52 insertions(+)
diff --git a/src/include/utils/bitops.h b/src/include/utils/bitops.h
new file mode 100644
index 0000000..de11624
--- /dev/null
+++ b/src/include/utils/bitops.h
@@ -0,0 +1,52 @@
+/*-------------------------------------------------------------------------
+ *
+ * bitops.h
+ * Simple bit operations.
+ *
+ * Portions Copyright (c) 2009, PostgreSQL Global Development Group
+ *
+ * $PostgreSQL$
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef BITOPS_H
+#define BITOPS_H
+
+#if defined(__ppc__) || defined(__powerpc__) || \
+ defined(__ppc64__) || defined (__powerpc64__)
+
+static inline int
+fls(unsigned int x)
+{
+ int lz;
+ asm("cntlz %0,%1" : "=r" (lz) : "r" (x));
+ return 32 - lz;
+}
+
+#else /* !powerpc */
+
+/* Architecture-independent implementations */
+
+/*
+ * fls: find last set bit.
+ *
+ * Returns the 1-based index of the most-significant bit in x. The MSB
+ * is bit number 32, the LSB is bit number 1. If x is zero, returns zero.
+ */
+static inline int
+fls(unsigned int x)
+{
+ int ls = 0;
+
+ while (x != 0)
+ {
+ ls++;
+ x >>= 1;
+ }
+
+ return ls;
+}
+
+#endif
+
+#endif /* BITOPS_H */
From | Date | Subject | |
---|---|---|---|
Next Message | Robert Haas | 2009-06-02 15:44:58 | Re: PostgreSQL Developer meeting minutes up |
Previous Message | Tom Lane | 2009-06-02 15:43:48 | Managing multiple branches in git |