]> git.llucax.com Git - software/dgc/cdgc.git/commitdiff
Revert "Skip non-scanneable words in chunks"
authorLeandro Lucarella <llucax@gmail.com>
Fri, 6 Aug 2010 02:46:55 +0000 (23:46 -0300)
committerLeandro Lucarella <llucax@gmail.com>
Fri, 6 Aug 2010 03:37:21 +0000 (00:37 -0300)
This reverts commit 5578146600d4ace17878e3b010aa09efdb202fb4, because
doing so many extra tests proved to be a "pessimization" in practice.

Avoiding the extra bit operations does help a little though, so that
change is not reverted.

rt/gc/cdgc/gc.d

index b62d1bee948aad941e047f69ad5e1af95f376903..3a925fc40bf358a64ecdbde8985e3d932caf75da 100644 (file)
@@ -621,18 +621,7 @@ void mark(void *pbot, void *ptop, size_t* pm_bitmask)
 
     //printf("marking range: %p -> %p\n", pbot, ptop);
     for (; p1 + type_size <= p2; p1 += type_size) {
-        size_t n = 0;
-        if (has_type_info) {
-            while (n < type_size && pm_bits[n / BITS_PER_WORD] == 0)
-                n += BITS_PER_WORD;
-            if (n < type_size && (pm_bits[n / BITS_PER_WORD] &
-                        ((1 << (BITS_PER_WORD / 2)) - 1)) == 0)
-                n += BITS_PER_WORD / 2;
-            else if (n < type_size && (pm_bits[n / BITS_PER_WORD] &
-                        ((1 << (BITS_PER_WORD / 4)) - 1)) == 0)
-                n += BITS_PER_WORD / 4;
-        }
-        for (; n < type_size; n++) {
+        for (size_t n = 0; n < type_size; n++) {
             // scan bit set for this word
             if (has_type_info &&
                     !(pm_bits[n / BITS_PER_WORD] & (1 << (n % BITS_PER_WORD))))