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