[project @ 2001-11-08 12:46:31 by simonmar]
[ghc-hetmet.git] / ghc / includes / Updates.h
index 77a18d1..d203324 100644 (file)
@@ -1,5 +1,5 @@
 /* -----------------------------------------------------------------------------
- * $Id: Updates.h,v 1.21 2000/12/04 12:31:20 simonmar Exp $
+ * $Id: Updates.h,v 1.25 2001/11/08 12:46:31 simonmar Exp $
  *
  * (c) The GHC Team, 1998-1999
  *
    }
 #endif
 
+#define UPD_STATIC_IND(updclosure, heapptr)                    \
+   {                                                           \
+       const StgInfoTable *info;                               \
+       info = ((StgClosure *)updclosure)->header.info;         \
+        AWAKEN_STATIC_BQ(info,updclosure);                     \
+       updateWithStaticIndirection(info,                       \
+                                   (StgClosure *)updclosure,   \
+                                   (StgClosure *)heapptr);     \
+   }
+
 #if defined(PROFILING) || defined(TICKY_TICKY)
 #define UPD_PERM_IND(updclosure, heapptr)                      \
    {                                                           \
 #if defined(PAR) 
 
 /* 
-   In a parallel setup several types of closures, might have a blocking queue:
+   In a parallel setup several types of closures might have a blocking queue:
      BLACKHOLE_BQ ... same as in the default concurrent setup; it will be
                       reawakened via calling UPD_IND on that closure after
                      having finished the computation of the graph
      TSO           ... as in the default concurrent setup
      BLOCKED_FETCH ... indicating that a TSO on another PE is waiting for
                        the result of the current computation
-     CONSTR        ... a RBHSave closure (which contains data ripped out of
+     CONSTR        ... an RBHSave closure (which contains data ripped out of
                        the closure to make room for a blocking queue; since
                       it only contains data we use the exisiting type of
                       a CONSTR closure); this closure is the end of a 
@@ -126,9 +136,7 @@ extern void awakenBlockedQueue(StgBlockingQueueElement *q, StgClosure *node);
        if (info == &stg_BLACKHOLE_BQ_info ||               \
            info == &stg_FETCH_ME_BQ_info ||                \
            get_itbl(closure)->type == RBH) {                           \
-               StgBlockingQueueElement *bqe = ((StgBlockingQueue *)closure)->blocking_queue;\
-               ASSERT(bqe!=END_BQ_QUEUE);                              \
-               DO_AWAKEN_BQ(bqe, closure);                             \
+               DO_AWAKEN_BQ(((StgBlockingQueue *)closure)->blocking_queue, closure);                           \
        }
 
 #elif defined(GRAN)
@@ -142,9 +150,7 @@ extern void awakenBlockedQueue(StgBlockingQueueElement *q, StgClosure *node);
 #define AWAKEN_BQ(info,closure)                                                \
        if (info == &stg_BLACKHOLE_BQ_info ||               \
            get_itbl(closure)->type == RBH) {                           \
-               StgBlockingQueueElement *bqe = ((StgBlockingQueue *)closure)->blocking_queue;\
-               ASSERT(bqe!=END_BQ_QUEUE);                              \
-               DO_AWAKEN_BQ(bqe, closure);                             \
+               DO_AWAKEN_BQ(((StgBlockingQueue *)closure)->blocking_queue, closure);                           \
        }
 
 
@@ -160,6 +166,11 @@ extern void awakenBlockedQueue(StgTSO *q);
           DO_AWAKEN_BQ(closure);                                        \
        }
 
+#define AWAKEN_STATIC_BQ(info,closure)                                 \
+       if (info == &stg_BLACKHOLE_BQ_STATIC_info) {                    \
+          DO_AWAKEN_BQ(closure);                                        \
+       }
+
 #endif /* GRAN || PAR */
 
 /* -------------------------------------------------------------------------
@@ -224,21 +235,17 @@ extern void newCAF(StgClosure*);
     SET_INFO((StgInd *)cafptr,(const StgInfoTable*)&stg_IND_STATIC_info);\
   }
 
-#ifdef INTERPRETER
-extern void newCAF_made_by_Hugs(StgCAF*);
-#endif
-
 /* -----------------------------------------------------------------------------
    Update-related prototypes
    -------------------------------------------------------------------------- */
 
+EXTFUN_RTS(__stg_update_PAP);
+
 DLL_IMPORT_RTS extern STGFUN(stg_upd_frame_entry);
 
 extern DLL_IMPORT_RTS const StgInfoTable stg_PAP_info;
 DLL_IMPORT_RTS STGFUN(stg_PAP_entry);
 
-EXTFUN_RTS(stg_update_PAP);
-
 extern DLL_IMPORT_RTS const StgInfoTable stg_AP_UPD_info;
 DLL_IMPORT_RTS STGFUN(stg_AP_UPD_entry);