Commit d5568f03 by Jan Hubicka Committed by Jan Hubicka

bitmap.h (+bmp_iter_next_bit): New.

	* bitmap.h (+bmp_iter_next_bit): New.
	(bmp_iter_set, bmp_iter_and, bmp_iter_and_compl):
	Use it.

From-SVN: r160637
parent 5914a70f
2010-06-11 Jan Hubicka <jh@suse.cz>
* bitmap.h (+bmp_iter_next_bit): New.
(bmp_iter_set, bmp_iter_and, bmp_iter_and_compl):
Use it.
2010-06-11 Sandra Loosemore <sandra@codesourcery.com> 2010-06-11 Sandra Loosemore <sandra@codesourcery.com>
Eric Botcazou <ebotcazou@adacore.com> Eric Botcazou <ebotcazou@adacore.com>
......
...@@ -385,6 +385,27 @@ bmp_iter_next (bitmap_iterator *bi, unsigned *bit_no) ...@@ -385,6 +385,27 @@ bmp_iter_next (bitmap_iterator *bi, unsigned *bit_no)
*bit_no += 1; *bit_no += 1;
} }
/* Advance to first set bit in BI. */
static inline void
bmp_iter_next_bit (bitmap_iterator * bi, unsigned *bit_no)
{
#if (GCC_VERSION >= 3004)
{
unsigned int n = __builtin_ctzl (bi->bits);
gcc_assert (sizeof (unsigned long) == sizeof (BITMAP_WORD));
bi->bits >>= n;
*bit_no += n;
}
#else
while (!(bi->bits & 1))
{
bi->bits >>= 1;
*bit_no += 1;
}
#endif
}
/* Advance to the next nonzero bit of a single bitmap, we will have /* Advance to the next nonzero bit of a single bitmap, we will have
already advanced past the just iterated bit. Return true if there already advanced past the just iterated bit. Return true if there
is a bit to iterate. */ is a bit to iterate. */
...@@ -396,11 +417,7 @@ bmp_iter_set (bitmap_iterator *bi, unsigned *bit_no) ...@@ -396,11 +417,7 @@ bmp_iter_set (bitmap_iterator *bi, unsigned *bit_no)
if (bi->bits) if (bi->bits)
{ {
next_bit: next_bit:
while (!(bi->bits & 1)) bmp_iter_next_bit (bi, bit_no);
{
bi->bits >>= 1;
*bit_no += 1;
}
return true; return true;
} }
...@@ -443,11 +460,7 @@ bmp_iter_and (bitmap_iterator *bi, unsigned *bit_no) ...@@ -443,11 +460,7 @@ bmp_iter_and (bitmap_iterator *bi, unsigned *bit_no)
if (bi->bits) if (bi->bits)
{ {
next_bit: next_bit:
while (!(bi->bits & 1)) bmp_iter_next_bit (bi, bit_no);
{
bi->bits >>= 1;
*bit_no += 1;
}
return true; return true;
} }
...@@ -510,11 +523,7 @@ bmp_iter_and_compl (bitmap_iterator *bi, unsigned *bit_no) ...@@ -510,11 +523,7 @@ bmp_iter_and_compl (bitmap_iterator *bi, unsigned *bit_no)
if (bi->bits) if (bi->bits)
{ {
next_bit: next_bit:
while (!(bi->bits & 1)) bmp_iter_next_bit (bi, bit_no);
{
bi->bits >>= 1;
*bit_no += 1;
}
return true; return true;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment