/* -----------------------------------------------------------------------------
- * $Id: Updates.h,v 1.21 2000/12/04 12:31:20 simonmar Exp $
+ * $Id: Updates.h,v 1.24 2001/03/22 03:51:09 hwloidl 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
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)
#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); \
}
DO_AWAKEN_BQ(closure); \
}
+#define AWAKEN_STATIC_BQ(info,closure) \
+ if (info == &stg_BLACKHOLE_BQ_STATIC_info) { \
+ DO_AWAKEN_BQ(closure); \
+ }
+
#endif /* GRAN || PAR */
/* -------------------------------------------------------------------------
SET_INFO((StgInd *)cafptr,(const StgInfoTable*)&stg_IND_STATIC_info);\
}
-#ifdef INTERPRETER
-extern void newCAF_made_by_Hugs(StgCAF*);
-#endif
-
/* -----------------------------------------------------------------------------
Update-related prototypes
-------------------------------------------------------------------------- */