X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fincludes%2FCmm.h;h=415dc4c056c0238c87e30e327975ff6522cffcf6;hb=085d1c545c6578d5756d41f956c049274ce7eaa6;hp=ff361962f3db35311f780c9332fd611587016dcc;hpb=9d6c826bf78641d0e07a4c9fd93d6172fdb4afc1;p=ghc-hetmet.git diff --git a/ghc/includes/Cmm.h b/ghc/includes/Cmm.h index ff36196..415dc4c 100644 --- a/ghc/includes/Cmm.h +++ b/ghc/includes/Cmm.h @@ -317,14 +317,37 @@ HP_CHK_GEN(alloc,liveness,reentry); \ TICK_ALLOC_HEAP_NOCTR(alloc); +// allocateLocal() allocates from the nursery, so we check to see +// whether the nursery is nearly empty in any function that uses +// allocateLocal() - this includes many of the primops. #define MAYBE_GC(liveness,reentry) \ - if (CInt[alloc_blocks] >= CInt[alloc_blocks_lim]) { \ + if (bdescr_link(CurrentNursery) == NULL) { \ R9 = liveness; \ R10 = reentry; \ jump stg_gc_gen_hp; \ } /* ----------------------------------------------------------------------------- + Closure headers + -------------------------------------------------------------------------- */ + +/* + * This is really ugly, since we don't do the rest of StgHeader this + * way. The problem is that values from DerivedConstants.h cannot be + * dependent on the way (SMP, PROF etc.). For SIZEOF_StgHeader we get + * the value from GHC, but it seems like too much trouble to do that + * for StgThunkHeader. + */ +#ifdef SMP +#define SIZEOF_StgThunkHeader SIZEOF_StgHeader+SIZEOF_StgSMPThunkHeader +#else +#define SIZEOF_StgThunkHeader SIZEOF_StgHeader +#endif + +#define StgThunk_payload(__ptr__,__ix__) \ + W_[__ptr__+SIZEOF_StgThunkHeader+ WDS(__ix__)] + +/* ----------------------------------------------------------------------------- Closures -------------------------------------------------------------------------- */ @@ -363,8 +386,8 @@ */ #define StgFunInfoExtra_slow_apply(fun_info) \ - (StgFunInfoExtraRev_slow_apply_offset(fun_info) \ - + (fun_info) + SIZEOF_StgFunInfoExtraRev + SIZEOF_StgInfoTable) + (TO_W_(StgFunInfoExtraRev_slow_apply_offset(fun_info)) \ + + (fun_info) + SIZEOF_StgFunInfoExtraRev + SIZEOF_StgInfoTable) #define StgFunInfoExtra_fun_type(i) StgFunInfoExtraRev_fun_type(i) #define StgFunInfoExtra_arity(i) StgFunInfoExtraRev_arity(i) @@ -485,4 +508,10 @@ TICK_BUMP(ALLOC_HEAP_ctr); \ TICK_BUMP_BY(ALLOC_HEAP_tot,n) +/* ----------------------------------------------------------------------------- + Misc junk + -------------------------------------------------------------------------- */ + +#define TICK_MILLISECS (1000/TICK_FREQUENCY) /* ms per tick */ + #endif /* CMM_H */