From 193d7268a8b75895c9b514552776527ddd3fc0b9 Mon Sep 17 00:00:00 2001 From: Kazu Hirata Date: Mon, 18 Oct 2004 23:56:18 +0000 Subject: 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 --- gcc/sbitmap.h | 32 +++++++++++++------------------- 1 file changed, 13 insertions(+), 19 deletions(-) (limited to 'gcc') 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) -- cgit v1.2.1