[project @ 2005-11-17 14:03:18 by simonmar]
authorsimonmar <unknown>
Thu, 17 Nov 2005 14:03:18 +0000 (14:03 +0000)
committersimonmar <unknown>
Thu, 17 Nov 2005 14:03:18 +0000 (14:03 +0000)
small improvement to the update code

ghc/rts/Updates.h

index 61df89b..fd48fb8 100644 (file)
@@ -268,23 +268,22 @@ DEBUG_FILL_SLOP(StgClosure *p)
 #define updateWithIndirection(ind_info, p1, p2, and_then)      \
     W_ bd;                                                     \
                                                                \
+    StgInd_indirectee(p1) = p2;                                \
 /*    ASSERT( p1 != p2 && !closure_IND(p1) );                  \
  */ LDV_RECORD_DEAD_FILL_SLOP_DYNAMIC(p1);                     \
 /*  foreign "C" cas(p1 "ptr", 0, stg_WHITEHOLE_info);          \
  */ bd = Bdescr(p1);                                           \
     if (bdescr_gen_no(bd) != 0 :: CInt) {                      \
       DEBUG_FILL_SLOP(p1);                                     \
-      foreign "C" recordMutableCap(p1 "ptr",                   \
-                                  MyCapability() "ptr",        \
+      foreign "C" recordMutableCap(p1 "ptr",                   \
+                                  MyCapability() "ptr",        \
                                   bdescr_gen_no(bd));          \
-      StgInd_indirectee(p1) = p2;                              \
       SET_INFO(p1, stg_IND_OLDGEN_info);                       \
       LDV_RECORD_CREATE(p1);                                   \
       TICK_UPD_OLD_IND();                                      \
       and_then;                                                        \
     } else {                                                   \
-      StgInd_indirectee(p1) = p2;                              \
-      SET_INFO(p1, ind_info);                                  \
+        SET_INFO(p1, ind_info);                                        \
       LDV_RECORD_CREATE(p1);                                   \
       TICK_UPD_NEW_IND();                                      \
       and_then;                                                        \
@@ -296,17 +295,16 @@ DEBUG_FILL_SLOP(StgClosure *p)
                                                                        \
     /* cas(p1, 0, &stg_WHITEHOLE_info); */                             \
     ASSERT( (P_)p1 != (P_)p2 && !closure_IND(p1) );                    \
+    ((StgInd *)p1)->indirectee = p2;                                   \
     LDV_RECORD_DEAD_FILL_SLOP_DYNAMIC(p1);                             \
     bd = Bdescr((P_)p1);                                               \
     if (bd->gen_no != 0) {                                             \
       DEBUG_FILL_SLOP(p1);                                             \
       recordMutableGenLock(p1, &generations[bd->gen_no]);              \
-      ((StgInd *)p1)->indirectee = p2;                                 \
       SET_INFO(p1, &stg_IND_OLDGEN_info);                              \
       TICK_UPD_OLD_IND();                                              \
       and_then;                                                                \
     } else {                                                           \
-      ((StgInd *)p1)->indirectee = p2;                                 \
       SET_INFO(p1, ind_info);                                          \
       LDV_RECORD_CREATE(p1);                                           \
       TICK_UPD_NEW_IND();                                              \