diff options
Diffstat (limited to 'lib/ext2fs/bitops.c')
| -rw-r--r-- | lib/ext2fs/bitops.c | 79 |
1 files changed, 0 insertions, 79 deletions
diff --git a/lib/ext2fs/bitops.c b/lib/ext2fs/bitops.c index 42328478..d7db9049 100644 --- a/lib/ext2fs/bitops.c +++ b/lib/ext2fs/bitops.c @@ -76,82 +76,3 @@ void ext2fs_warn_bitmap(errcode_t errcode, unsigned long arg, com_err(0, errcode, "#%lu", arg); #endif } - -/* - * C-only 64 bit ops. - */ - -int ext2fs_set_bit64(__u64 nr, void * addr) -{ - int mask, retval; - unsigned char *ADDR = (unsigned char *) addr; - - ADDR += nr >> 3; - mask = 1 << (nr & 0x07); - retval = mask & *ADDR; - *ADDR |= mask; - return retval; -} - -int ext2fs_clear_bit64(__u64 nr, void * addr) -{ - int mask, retval; - unsigned char *ADDR = (unsigned char *) addr; - - ADDR += nr >> 3; - mask = 1 << (nr & 0x07); - retval = mask & *ADDR; - *ADDR &= ~mask; - return retval; -} - -int ext2fs_test_bit64(__u64 nr, const void * addr) -{ - int mask; - const unsigned char *ADDR = (const unsigned char *) addr; - - ADDR += nr >> 3; - mask = 1 << (nr & 0x07); - return (mask & *ADDR); -} - -static unsigned int popcount8(unsigned int w) -{ - unsigned int res = w - ((w >> 1) & 0x55); - res = (res & 0x33) + ((res >> 2) & 0x33); - return (res + (res >> 4)) & 0x0F; -} - -static unsigned int popcount32(unsigned int w) -{ - unsigned int res = w - ((w >> 1) & 0x55555555); - res = (res & 0x33333333) + ((res >> 2) & 0x33333333); - res = (res + (res >> 4)) & 0x0F0F0F0F; - res = res + (res >> 8); - return (res + (res >> 16)) & 0x000000FF; -} - -unsigned int ext2fs_bitcount(const void *addr, unsigned int nbytes) -{ - const unsigned char *cp = addr; - const __u32 *p; - unsigned int res = 0; - - while (((((unsigned long) cp) & 3) != 0) && (nbytes > 0)) { - res += popcount8(*cp++); - nbytes--; - } - p = (const __u32 *) cp; - - while (nbytes > 4) { - res += popcount32(*p++); - nbytes -= 4; - } - cp = (const unsigned char *) p; - - while (nbytes > 0) { - res += popcount8(*cp++); - nbytes--; - } - return res; -} |
