unsigned long hbitmap_iter_skip_words(HBitmapIter *hbi)

{

    size_t pos = hbi->pos;

    const HBitmap *hb = hbi->hb;

    unsigned i = HBITMAP_LEVELS - 1;



    unsigned long cur;

    do {

        cur = hbi->cur[--i];

        pos >>= BITS_PER_LEVEL;

    } while (cur == 0);



    /* Check for end of iteration.  We always use fewer than BITS_PER_LONG

     * bits in the level 0 bitmap; thus we can repurpose the most significant

     * bit as a sentinel.  The sentinel is set in hbitmap_alloc and ensures

     * that the above loop ends even without an explicit check on i.

     */



    if (i == 0 && cur == (1UL << (BITS_PER_LONG - 1))) {

        return 0;

    }

    for (; i < HBITMAP_LEVELS - 1; i++) {

        /* Shift back pos to the left, matching the right shifts above.

         * The index of this word's least significant set bit provides

         * the low-order bits.

         */

        pos = (pos << BITS_PER_LEVEL) + ffsl(cur) - 1;

        hbi->cur[i] = cur & (cur - 1);



        /* Set up next level for iteration.  */

        cur = hb->levels[i + 1][pos];

    }



    hbi->pos = pos;

    trace_hbitmap_iter_skip_words(hbi->hb, hbi, pos, cur);



    assert(cur);

    return cur;

}

unsigned long hbitmap_iter_skip_words(HBitmapIter *hbi)

{

    size_t pos = hbi->pos;

    const HBitmap *hb = hbi->hb;

    unsigned i = HBITMAP_LEVELS - 1;



    unsigned long cur;

    do {

        cur = hbi->cur[--i];

        pos >>= BITS_PER_LEVEL;

    } while (cur == 0);



    











    if (i == 0 && cur == (1UL << (BITS_PER_LONG - 1))) {

        return 0;

    }

    for (; i < HBITMAP_LEVELS - 1; i++) {

        







        pos = (pos << BITS_PER_LEVEL) + ffsl(cur) - 1;

        hbi->cur[i] = cur & (cur - 1);



        

        cur = hb->levels[i + 1][pos];

    }



    hbi->pos = pos;

    trace_hbitmap_iter_skip_words(hbi->hb, hbi, pos, cur);



    assert(cur);

    return cur;

}

        return 0;         pos = (pos << BITS_PER_LEVEL) + ffsl(cur) - 1;
unsigned long FUNC_0(HBitmapIter *VAR_0)

{

    size_t pos = VAR_0->pos;

    const HBitmap *VAR_1 = VAR_0->VAR_1;

    unsigned VAR_2 = HBITMAP_LEVELS - 1;



    unsigned long VAR_3;

    do {

        VAR_3 = VAR_0->VAR_3[--VAR_2];

        pos >>= BITS_PER_LEVEL;

    } while (VAR_3 == 0);



    











    if (VAR_2 == 0 && VAR_3 == (1UL << (BITS_PER_LONG - 1))) {

        return 0;

    }

    for (; VAR_2 < HBITMAP_LEVELS - 1; VAR_2++) {

        







        pos = (pos << BITS_PER_LEVEL) + ffsl(VAR_3) - 1;

        VAR_0->VAR_3[VAR_2] = VAR_3 & (VAR_3 - 1);



        

        VAR_3 = VAR_1->levels[VAR_2 + 1][pos];

    }



    VAR_0->pos = pos;

    trace_hbitmap_iter_skip_words(VAR_0->VAR_1, VAR_0, pos, VAR_3);



    assert(VAR_3);

    return VAR_3;

}

unsigned long FUNC_0(HBitmapIter *VAR_0)
{ size_t pos = VAR_0->pos; const HBitmap *VAR_1 = VAR_0->VAR_1; unsigned VAR_2 = HBITMAP_LEVELS - 1; unsigned long VAR_3; do { VAR_3 = VAR_0->VAR_3[--VAR_2]; pos >>= BITS_PER_LEVEL; } while (VAR_3 == 0); if (VAR_2 == 0 && VAR_3 == (1UL << (BITS_PER_LONG - 1))) { return 0; } for (; VAR_2 < HBITMAP_LEVELS - 1; VAR_2++) { pos = (pos << BITS_PER_LEVEL) + ffsl(VAR_3) - 1; VAR_0->VAR_3[VAR_2] = VAR_3 & (VAR_3 - 1); VAR_3 = VAR_1->levels[VAR_2 + 1][pos]; } VAR_0->pos = pos; trace_hbitmap_iter_skip_words(VAR_0->VAR_1, VAR_0, pos, VAR_3); assert(VAR_3); return VAR_3; }