X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fincludes%2FCmm.h;h=ea760a860fbf34b0de2414324de51eb35cfe5c02;hb=beb5737b7ee42c4e9373a505e7d957206d69a30e;hp=e989a00e6219296902c8c4a6a17aa9b03c5bd8b4;hpb=b250f6185627671d8b3e80004671663fe88ac80f;p=ghc-hetmet.git diff --git a/ghc/includes/Cmm.h b/ghc/includes/Cmm.h index e989a00..ea760a8 100644 --- a/ghc/includes/Cmm.h +++ b/ghc/includes/Cmm.h @@ -292,6 +292,8 @@ #error mp_limb_t != StgWord: assumptions in PrimOps.cmm are now false #endif +#define MyCapability() (BaseReg - OFFSET_Capability_r) + /* ------------------------------------------------------------------------- Allocation and garbage collection ------------------------------------------------------------------------- */ @@ -317,8 +319,11 @@ 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 || CInt[alloc_blocks] >= CInt[alloc_blocks_lim]) { \ R9 = liveness; \ R10 = reentry; \ jump stg_gc_gen_hp; \ @@ -335,11 +340,7 @@ * 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__)]