X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fincludes%2FUpdates.h;h=b29fcc235361be363691dafee2ba805ece1f72b1;hb=902bbf801876c95e1b73cfb8e38235ec08ee20a8;hp=77a18d1573978cdc12437a5a75ba7b67bc6bc5e6;hpb=9ac55e08e159d7a4647ab01e7872e69dd762f275;p=ghc-hetmet.git diff --git a/ghc/includes/Updates.h b/ghc/includes/Updates.h index 77a18d1..b29fcc2 100644 --- a/ghc/includes/Updates.h +++ b/ghc/includes/Updates.h @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------------- - * $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 * @@ -61,6 +61,16 @@ } #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) \ { \ @@ -94,7 +104,7 @@ #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 @@ -111,7 +121,7 @@ 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,10 +235,6 @@ 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 -------------------------------------------------------------------------- */