-// Find First (least-significant) Set, counting from 0,
-// undefined if no bits set
-
-static inline int ll_ffs(unsigned long val)
-{
- unsigned long ret;
- asm("bsfq %1, %0" : "=r" (ret) : "r" (val));
- return ret;
-}
-
-// Find Last (most-significant) Set, counting from 0,
-// undefined if no bits set
-
-static inline int ll_fls(unsigned long val)
-{
- unsigned long ret;
- asm("bsrq %1, %0" : "=r" (ret) : "r" (val));
- return ret;
-}
-
-// As above, but on 64-bit values, regardless of sizeof(long)
-static inline int ll_ffs64(uint64_t val)
-{
- return ll_ffs(val);
-}
-
-static inline int ll_fls64(uint64_t val)
-{
- return ll_fls(val);
-}
-
-// Set/Clear the nth bit in a multiword bitmap. These functions
-// are endian and word-size dependent.
-
-static inline void ll_multiword_set_bit(unsigned long *bitmap, int bit)
-{
- asm("bts %1, %0" : "=m" (bitmap[0]) : "r" (bit) : "memory");
-}
-
-static inline void ll_multiword_clear_bit(unsigned long *bitmap, int bit)
-{
- asm("btr %1, %0" : "=m" (bitmap[0]) : "r" (bit) : "memory");
-}