@ -17,41 +17,36 @@ extern int test_and_change_bit(int nr, volatile void *addr);
# ifdef __KERNEL__
/*
* ffs : find first bit set . This is defined the same way as
* the libc and compiler builtin ffs routines , therefore
* differs in spirit from the above ffz ( man ffs ) .
*/
extern __inline__ int ffs ( int x )
extern inline int test_bit ( int nr , __const__ volatile void * addr )
{
int r = 1 ;
if ( ! x )
return 0 ;
if ( ! ( x & 0xffff ) ) {
x > > = 16 ;
r + = 16 ;
}
if ( ! ( x & 0xff ) ) {
x > > = 8 ;
r + = 8 ;
}
if ( ! ( x & 0xf ) ) {
x > > = 4 ;
r + = 4 ;
}
if ( ! ( x & 3 ) ) {
x > > = 2 ;
r + = 2 ;
}
if ( ! ( x & 1 ) ) {
x > > = 1 ;
r + = 1 ;
}
return r ;
__const__ unsigned int * p = ( __const__ unsigned int * ) addr ;
return ( p [ nr > > 5 ] & ( 1UL < < ( nr & 31 ) ) ) ! = 0 ;
}
extern inline int test_and_set_bit ( int nr , volatile void * vaddr )
{
char retval ;
volatile char * p = & ( ( volatile char * ) vaddr ) [ ( nr ^ 31 ) > > 3 ] ;
__asm__ __volatile__ ( " bset %2,(%4) ; sne % 0 "
: " =d " ( retval ) , " =m " ( * p )
: " di " ( nr & 7 ) , " m " ( * p ) , " a " ( p ) ) ;
return retval ;
}
# define __ffs(x) (ffs(x) - 1)
# define PLATFORM_FFS
/*
* * hweightN : returns the hamming weight ( i . e . the number
* * of bits set ) of a N - bit word
* */
# define hweight32(x) generic_hweight32(x)
# define hweight16(x) generic_hweight16(x)
# define hweight8(x) generic_hweight8(x)
# endif /* __KERNEL__ */