--- zzzz-none-000/linux-2.4.17/include/asm-mips/bitops.h 2001-09-09 17:43:01.000000000 +0000 +++ sangam-fb-322/linux-2.4.17/include/asm-mips/bitops.h 2004-11-24 13:21:30.000000000 +0000 @@ -621,8 +621,7 @@ "2:" : "=r" (res), "=r" (dummy), "=r" (addr) : "0" ((signed int) 0), "1" ((unsigned int) 0xffffffff), - "2" (addr), "r" (size) - : "$1"); + "2" (addr), "r" (size)); return res; } @@ -657,8 +656,7 @@ ".set\treorder\n" "1:" : "=r" (set), "=r" (dummy) - : "0" (0), "1" (1 << bit), "r" (*p) - : "$1"); + : "0" (0), "1" (1 << bit), "r" (*p)); if (set < (32 - bit)) return set + offset; set = 32 - bit; @@ -679,30 +677,22 @@ * * Undefined if no zero exists, so code should check against ~0UL first. */ -extern __inline__ unsigned long ffz(unsigned long word) +static inline unsigned long ffz(unsigned long word) { - unsigned int __res; - unsigned int mask = 1; + unsigned long k; - __asm__ ( - ".set\tnoreorder\n\t" - ".set\tnoat\n\t" - "move\t%0,$0\n" - "1:\tand\t$1,%2,%1\n\t" - "beqz\t$1,2f\n\t" - "sll\t%1,1\n\t" - "bnez\t%1,1b\n\t" - "addiu\t%0,1\n\t" - ".set\tat\n\t" - ".set\treorder\n" - "2:\n\t" - : "=&r" (__res), "=r" (mask) - : "r" (word), "1" (mask) - : "$1"); + word = ~word; + k = 31; + if (word & 0x0000ffffUL) { k -= 16; word <<= 16; } + if (word & 0x00ff0000UL) { k -= 8; word <<= 8; } + if (word & 0x0f000000UL) { k -= 4; word <<= 4; } + if (word & 0x30000000UL) { k -= 2; word <<= 2; } + if (word & 0x40000000UL) { k -= 1; } - return __res; + return k; } + #ifdef __KERNEL__ /**