summaryrefslogtreecommitdiff
path: root/gcc/sbitmap.h
diff options
context:
space:
mode:
authorKazu Hirata <kazu@gcc.gnu.org>2004-10-18 23:56:18 +0000
committerKazu Hirata <kazu@gcc.gnu.org>2004-10-18 23:56:18 +0000
commit193d7268a8b75895c9b514552776527ddd3fc0b9 (patch)
treedf439e236caf978e52207ade9766b30f9adaddab /gcc/sbitmap.h
parent00268eb38766fd4c114f5fc53b43217eb06d7862 (diff)
downloadgcc-193d7268a8b75895c9b514552776527ddd3fc0b9.tar.gz
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
Diffstat (limited to 'gcc/sbitmap.h')
-rw-r--r--gcc/sbitmap.h32
1 files changed, 13 insertions, 19 deletions
diff --git a/gcc/sbitmap.h b/gcc/sbitmap.h
index c18b3762b4a..e75e3b66df3 100644
--- a/gcc/sbitmap.h
+++ b/gcc/sbitmap.h
@@ -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)