FFS32(3) BSD Library Functions Manual FFS32(3)NAME
ffs32, ffs64, fls32, fls64 -- find first or last bit set
The ffs32() and ffs64() functions find the first bit set in n and return the index of that bit. Conversely, the fls32() and fls64() func-
tions find the last bit set in n, returning the index of the bit.
The search always starts from the bit 1 (the least significant bit). If the argument n is zero, each function returns zero.
The described functions are implemented as static inline functions in the <sys/bitops.h> header. The standard C library includes a more por-
table ffs(3) for user applications.
In the following example f = 3 and l = 7:
uint32_t n = 0x44; /* 01000100 */
int f, l;
f = ffs32(n);
l = fls32(n);
SEE ALSO bitops(3), bits(3), bitstring(3), ffs(3), setbit(9)HISTORY
These functions first appeared in NetBSD 5.0.
BSD April 8, 2011 BSD
Check Out this Related Man Page
FAST_DIVIDE32(3) BSD Library Functions Manual FAST_DIVIDE32(3)NAME
fast_divide32, fast_divide32_prepare, fast_remainder32 -- fast 32bit division and remainder
fast_divide32(uint32_t v, uint32_t div, uint32_t m, uint8_t s1, uint8_t s2);
fast_remainder32(uint32_t v, uint32_t div, uint32_t m, uint8_t s1, uint8_t s2);
fast_divide32_prepare(uint32_t div, uint32_t *m, uint8_t *s1, uint8_t *s2);
The fast_divide32 and fast_remainder32 functions compute the equivalent of v / div and v % div using optimised CPU instructions. The con-
stants m, s1, and s2 must first be preset for a given value of div with the fast_divide32_prepare function.
These functions are useful for inner loops and other performance-sensitive tasks. The functions expand to code that is typically slightly
larger than a plain division instruction, but requires less time to execute. The code for constant div arguments should be equivalent to the
assembly created by GCC.
The following example computes q = a / b and r = a % b:
uint32_t a, b, q, r, m;
uint8_t s1, s2;
fast_divide32_prepare(b, &m, &s1, &s2);
q = fast_divide32(a, b, m, s1, s2);
r = fast_remainder32(a, b, m, s1, s2);
SEE ALSO bitops(3), div(3), remainder(3)
Torbjorn Granlund and Peter L. Montgomery, "Division by Invariant Integers Using Multiplication", ACM SIGPLAN Notices, Issue 6, Volume 29,
http://gmplib.org/~tege/divcnst-pldi94.pdf, 61-72, June 1994.
The fast_divide32 function appeared in NetBSD 6.0.
BSD May 10, 2011 BSD