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 <j...@ozlabs.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 */ -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers