Make LDV_FILL_SLOP use a forwards loop rather than a backwards loop
authorIan Lynagh <igloo@earth.li>
Fri, 6 Mar 2009 15:51:24 +0000 (15:51 +0000)
committerIan Lynagh <igloo@earth.li>
Fri, 6 Mar 2009 15:51:24 +0000 (15:51 +0000)
rts/LdvProfile.h
rts/sm/Evac.c

index 5380c92..c61b010 100644 (file)
@@ -24,11 +24,11 @@ extern void LdvCensusKillAll ( void );
 // Invoked when: 
 //   1) Hp is incremented and exceeds HpLim (in Updates.hc).
 //   2) copypart() is called (in GC.c).
-#define LDV_FILL_SLOP(from, howManyBackwards)  \
+#define LDV_FILL_SLOP(from, howMany)   \
   if (era > 0) {                               \
     int i;                                     \
-    for (i = 1;i <= (howManyBackwards); i++)   \
-      ((StgWord *)(from))[-i] = 0;             \
+    for (i = 0;i < (howMany); i++)     \
+      ((StgWord *)(from))[i] = 0;              \
   }
 
 // Informs the LDV profiler that closure c has just been evacuated.
index 01cc0d8..1c453fc 100644 (file)
@@ -212,7 +212,7 @@ spin:
     SET_EVACUAEE_FOR_LDV(from, size_to_reserve);
     // fill the slop
     if (size_to_reserve - size_to_copy > 0)
-       LDV_FILL_SLOP(to + size_to_reserve, (int)(size_to_reserve - size_to_copy));
+       LDV_FILL_SLOP(to + size_to_copy, (int)(size_to_reserve - size_to_copy));
 #endif
 
     return rtsTrue;