Commit 193d7268 by Kazu Hirata

sbitmap.h (EXECUTE_IF_SET_IN_SBITMAP): Speed up by shifting the currently visited word to right.

	* sbitmap.h (EXECUTE_IF_SET_IN_SBITMAP): Speed up by shifting
	the currently visited word to right.

From-SVN: r89259
parent 00268eb3
......@@ -58,30 +58,24 @@ typedef SBITMAP_ELT_TYPE *sbitmap_ptr;
/* Loop over all elements of SBITSET, starting with MIN. */
#define EXECUTE_IF_SET_IN_SBITMAP(SBITMAP, MIN, N, CODE) \
do { \
unsigned int word_num_; \
unsigned int word_num_ = (MIN) / (unsigned int) SBITMAP_ELT_BITS; \
unsigned int bit_num_ = (MIN) % (unsigned int) SBITMAP_ELT_BITS; \
unsigned int size_ = (SBITMAP)->size; \
SBITMAP_ELT_TYPE *ptr_ = (SBITMAP)->elms; \
SBITMAP_ELT_TYPE word_ = ptr_[word_num_] >> bit_num_; \
\
for (word_num_ = (MIN) / (unsigned int) SBITMAP_ELT_BITS; \
word_num_ < size_; word_num_++, bit_num_ = 0) \
for (; \
word_num_ < size_; \
word_num_++, bit_num_ = 0, word_ = ptr_[word_num_]) \
{ \
SBITMAP_ELT_TYPE word_ = ptr_[word_num_]; \
\
if (word_ != 0) \
for (; bit_num_ < SBITMAP_ELT_BITS; bit_num_++) \
{ \
SBITMAP_ELT_TYPE _mask = (SBITMAP_ELT_TYPE) 1 << bit_num_; \
\
if ((word_ & _mask) != 0) \
{ \
word_ &= ~ _mask; \
(N) = word_num_ * SBITMAP_ELT_BITS + bit_num_; \
CODE; \
if (word_ == 0) \
break; \
} \
} \
for (; word_ != 0; word_ >>= 1, bit_num_++) \
{ \
if ((word_ & 1) != 0) \
{ \
(N) = word_num_ * SBITMAP_ELT_BITS + bit_num_; \
CODE; \
} \
} \
} \
} while (0)
......
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