Added more comments / renamed some variables / bm_print() now also works on 64-bit systems.

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@7753 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/exp-drd/drd_bitmap.c b/exp-drd/drd_bitmap.c
index 912065b..992e1ea 100644
--- a/exp-drd/drd_bitmap.c
+++ b/exp-drd/drd_bitmap.c
@@ -122,13 +122,16 @@
     tl_assert(b_start < b_end);
     tl_assert((b_start & ADDR0_MASK) <= ((b_end - 1) & ADDR0_MASK));
       
-    for (b0 = b_start & ADDR0_MASK; b0 <= ((b_end - 1) & ADDR0_MASK); b0++)
+    if (access_type == eLoad)
     {
-      if (access_type == eLoad)
+      for (b0 = b_start & ADDR0_MASK; b0 <= ((b_end - 1) & ADDR0_MASK); b0++)
       {
         bm0_set(bm2->bm1.bm0_r, b0);
       }
-      else
+    }
+    else
+    {
+      for (b0 = b_start & ADDR0_MASK; b0 <= ((b_end - 1) & ADDR0_MASK); b0++)
       {
         bm0_set(bm2->bm1.bm0_w, b0);
       }
@@ -708,21 +711,18 @@
   for ( ; (bm2 = VG_(OSetGen_Next)(bm->oset)) != 0; )
   {
     const struct bitmap1* const bm1 = &bm2->bm1;
-    unsigned k;
-    for (k = 0; k < BITMAP1_UWORD_COUNT; k++)
+    unsigned b;
+    for (b = 0; b < ADDR0_COUNT; b++)
     {
-      unsigned b;
-      for (b = 0; b < BITS_PER_UWORD; b++)
+      const Addr a = (bm2->addr << ADDR0_BITS) | b;
+      const Bool r = bm0_is_set(bm1->bm0_r, b) != 0;
+      const Bool w = bm0_is_set(bm1->bm0_w, b) != 0;
+      if (r || w)
       {
-        int const r = bm1->bm0_r[k] & bm0_mask(b);
-        int const w = bm1->bm0_w[k] & bm0_mask(b);
-        Addr const a = MAKE_ADDRESS(bm2->addr, k * BITS_PER_UWORD | b);
-        if (r || w)
-        {
-          VG_(printf)("0x%08lx %c %c\n",
-                      (Addr)(a), 
-                      w ? 'W' : ' ', r ? 'R' : ' ');
-        }
+        VG_(printf)("0x%08lx %c %c\n",
+                    a,
+                    w ? 'W' : ' ',
+                    r ? 'R' : ' ');
       }
     }
   }
@@ -761,21 +761,21 @@
 static
 struct { Addr address; SizeT size; BmAccessTypeT access_type; }
   s_args[] = {
-    {          0, 1, eLoad  },
-    {        666, 4, eLoad  },
-    {        667, 2, eStore },
-    {       1024, 1, eStore },
-    { 0x0000ffff, 1, eLoad  },
-    { 0x0001ffff, 1, eLoad  },
-    { 0x00ffffff, 1, eLoad  },
-    { 0xffffffff, 1, eStore },
+    {    0 + ADDR0_COUNT, 1, eLoad  },
+    {  666 + ADDR0_COUNT, 4, eLoad  },
+    {  667 + ADDR0_COUNT, 2, eStore },
+    { -1 + 2*ADDR0_COUNT, 1, eStore },
+    {       0x0001ffffUL, 1, eLoad  },
+    {       0x0002ffffUL, 1, eLoad  },
+    {       0x00ffffffUL, 1, eLoad  },
+    {       0xffffffffUL, 1, eStore },
   };
 
 void bm_test(void)
 {
   struct bitmap* bm;
   struct bitmap* bm2;
-  int i, j;
+  unsigned i, j;
 
   VG_(printf)("Start of DRD BM unit test.\n");
 
@@ -801,10 +801,14 @@
   }
 
   VG_(printf)("Merge result:\n");
-  bm2 = bm_merge(bm, bm);
+  bm2 = bm_new();
+  bm_merge2(bm2, bm);
+  bm_merge2(bm2, bm);
   bm_print(bm);
 
+  VG_(printf)("Deleting bitmap bm\n");
   bm_delete(bm);
+  VG_(printf)("Deleting bitmap bm2\n");
   bm_delete(bm2);
 
   VG_(printf)("End of DRD BM unit test.\n");