Minor optimization of bm_clear().

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@7788 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/exp-drd/drd_bitmap.c b/exp-drd/drd_bitmap.c
index 62e17ed..9d21a1d 100644
--- a/exp-drd/drd_bitmap.c
+++ b/exp-drd/drd_bitmap.c
@@ -379,28 +379,6 @@
   return 0;
 }
 
-static __inline__
-void bm1_clear(struct bitmap1* const bm1, const Addr a1, const Addr a2)
-{
-  UWord idx;
-  UWord mask;
-
-#if 0
-  /* Commented out the statements below because of performance reasons. */
-  tl_assert(a1);
-  tl_assert(a1 <= a2);
-  tl_assert(UWORD_MSB(a1) == UWORD_MSB(a2)
-            || UWORD_MSB(a1) == UWORD_MSB(a2 - 1));
-#endif
-
-  idx = (a1 & ADDR0_MASK) >> BITS_PER_BITS_PER_UWORD;
-  /* mask: a contiguous series of one bits. The first bit set is bit */
-  /* UWORD_LSB(a2-1), and the last bit set is UWORD_LSB(a1).         */
-  mask = UWORD_LSB(a2) ? bm0_mask(a2) - bm0_mask(a1) : - bm0_mask(a1);
-  bm1->bm0_r[idx] &= ~mask;
-  bm1->bm0_w[idx] &= ~mask;
-}
-
 void bm_clear(const struct bitmap* const bm,
               const Addr a1,
               const Addr a2)
@@ -425,14 +403,14 @@
     {
       Addr c = b;
       /* If the first address in the bitmap that must be cleared does not */
-      /* start on an UWord boundary, start clearing the first addresses   */
-      /* by calling bm1_clear().                                          */
+      /* start on an UWord boundary, start clearing the first addresses.  */
       if (UWORD_LSB(c))
       {
         Addr c_next = UWORD_MSB(c) + BITS_PER_UWORD;
         if (c_next > b_next)
           c_next = b_next;
-        bm1_clear(&p2->bm1, c, c_next);
+        bm0_clear_range(p2->bm1.bm0_r, c & ADDR0_MASK, c_next - c);
+        bm0_clear_range(p2->bm1.bm0_w, c & ADDR0_MASK, c_next - c);
         c = c_next;
       }
       /* If some UWords have to be cleared entirely, do this now. */
@@ -452,12 +430,10 @@
         }
       }
       /* If the last address in the bitmap that must be cleared does not */
-      /* fall on an UWord boundary, clear the last addresses by calling  */
-      /* bm1_clear().                                                    */
-      if (c != b_next)
-      {
-        bm1_clear(&p2->bm1, c, b_next);
-      }
+      /* fall on an UWord boundary, clear the last addresses.            */
+      /* tl_assert(c <= b_next); */
+      bm0_clear_range(p2->bm1.bm0_r, c & ADDR0_MASK, b_next - c);
+      bm0_clear_range(p2->bm1.bm0_w, c & ADDR0_MASK, b_next - c);
     }
   }
 }