Fix bit ops for 64bit long

Fix bit ops for 64bit long.
This commit is contained in:
Takashi Iwai 2005-11-08 17:13:30 +00:00
parent 57922fb7e7
commit 6b46723473

View file

@ -20,34 +20,36 @@
* Zephaniah E. Hull 2005-08-15. * Zephaniah E. Hull 2005-08-15.
*/ */
__inline__ int set_bit(int nr, unsigned long * addr) static inline int set_bit(int nr, unsigned long * addr)
{ {
int mask, retval; unsigned long mask;
int retval;
addr += nr >> (sizeof(long) + 1); addr += nr / (sizeof(long) * 8);
mask = 1 << (nr & (sizeof(long) * 8 - 1)); mask = 1UL << (nr & (sizeof(long) * 8 - 1));
retval = (mask & *addr) != 0; retval = (mask & *addr) != 0;
*addr |= mask; *addr |= mask;
return retval; return retval;
} }
__inline__ int clear_bit(int nr, unsigned long * addr) static inline int clear_bit(int nr, unsigned long * addr)
{ {
int mask, retval; unsigned long mask;
int retval;
addr += nr >> (sizeof(long) + 1); addr += nr / (sizeof(long) * 8);
mask = 1 << (nr & (sizeof(long) * 8 - 1)); mask = 1UL << (nr & (sizeof(long) * 8 - 1));
retval = (mask & *addr) != 0; retval = (mask & *addr) != 0;
*addr &= ~mask; *addr &= ~mask;
return retval; return retval;
} }
__inline__ int test_bit(int nr, unsigned long * addr) static inline int test_bit(int nr, unsigned long * addr)
{ {
int mask; unsigned long mask;
addr += nr >> (sizeof(long) + 1); addr += nr / (sizeof(long) * 8);
mask = 1 << (nr & (sizeof(long) * 8 - 1)); mask = 1UL << (nr & (sizeof(long) * 8 - 1));
return ((mask & *addr) != 0); return ((mask & *addr) != 0);
} }