if (bit) {  bitvec = (*p) >> bit; __asm__("   slr  %0,%0\n" "   lhi  %2,0xff\n" "   tml  %1,0xffff\n" "   jnz  0f\n" "   ahi  %0,16\n" "   srl  %1,16\n" "0: tml  %1,0x00ff\n" "   jnz  1f\n" "   ahi  %0,8\n" "   srl  %1,8\n" "1: nr   %1,%2\n" "   ic   %1,0(%1,%3)\n" "   alr  %0,%1" : "=&d" (set), "+a" (bitvec), "=&d" (reg) : "a" (&_sb_findmap) : "cc" ); if (set < (32 - bit)) return set + offset; offset += 32 - bit; p++; }  res = find_first_bit (p, size - 32 * (p - (unsigned long *) addr)); return (offset + res);
if (offset >= size) return size; bit = offset & (__BITOPS_WORDSIZE - 1); offset -= bit; size -= offset; p = addr + offset / __BITOPS_WORDSIZE; if (bit) {  set = __ffs(*p & (~0UL << bit)); if (set >= size) return size + offset; if (set < __BITOPS_WORDSIZE) return set + offset; offset += __BITOPS_WORDSIZE; size -= __BITOPS_WORDSIZE; p++; } return offset + find_first_bit(p, size);
find_next_bit (const unsigned long * addr, int size, int offset){        unsigned long * p = ((unsigned long *) addr) + (offset >> 5);        unsigned long bitvec, reg;        int set, bit = offset & 31, res;        if (bit) {                /*                 * Look for set bit in first word                 */                bitvec = (*p) >> bit;                __asm__("   slr  %0,%0\n"                        "   lhi  %2,0xff\n"                        "   tml  %1,0xffff\n"                        "   jnz  0f\n"                        "   ahi  %0,16\n"                        "   srl  %1,16\n"                        "0: tml  %1,0x00ff\n"                        "   jnz  1f\n"                        "   ahi  %0,8\n"                        "   srl  %1,8\n"                        "1: nr   %1,%2\n"                        "   ic   %1,0(%1,%3)\n"                        "   alr  %0,%1"                        : "=&d" (set), "+a" (bitvec), "=&d" (reg)                        : "a" (&_sb_findmap) : "cc" );                if (set < (32 - bit))                        return set + offset;                offset += 32 - bit;                p++;        }        /*         * No set bit yet, search remaining full words for a bit         */        res = find_first_bit (p, size - 32 * (p - (unsigned long *) addr));        return (offset + res);}