X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=includes%2FCmm.h;h=0088c1aa05d9419221079ea6fea772ad790713e2;hb=9ba922ee06b048774d7a82964867ff768a78126e;hp=e3f46e143be84fc627179bde90d5a7965b4d489c;hpb=7a253ca40b1572ebf2caccfe7654d44b0d96b8ff;p=ghc-hetmet.git diff --git a/includes/Cmm.h b/includes/Cmm.h index e3f46e1..0088c1a 100644 --- a/includes/Cmm.h +++ b/includes/Cmm.h @@ -66,7 +66,6 @@ #define CMINUSMINUS 1 #include "ghcconfig.h" -#include "RtsConfig.h" /* ----------------------------------------------------------------------------- Types @@ -144,6 +143,18 @@ name : bits8[] str; \ } \ +#ifdef TABLES_NEXT_TO_CODE +#define RET_LBL(f) f##_info +#else +#define RET_LBL(f) f##_ret +#endif + +#ifdef TABLES_NEXT_TO_CODE +#define ENTRY_LBL(f) f##_info +#else +#define ENTRY_LBL(f) f##_entry +#endif + /* ----------------------------------------------------------------------------- Byte/word macros @@ -158,7 +169,7 @@ #if SIZEOF_W == 4 #define W_SHIFT 2 #elif SIZEOF_W == 8 -#define W_SHIFT 4 +#define W_SHIFT 3 #endif /* Converting quantities of words to bytes */ @@ -284,9 +295,7 @@ (TO_W_( %INFO_TYPE(%STD_INFO(info)) )) { \ case \ IND, \ - IND_OLDGEN, \ IND_PERM, \ - IND_OLDGEN_PERM, \ IND_STATIC: \ { \ P1 = StgInd_indirectee(P1); \ @@ -320,32 +329,27 @@ Constants. -------------------------------------------------------------------------- */ -#include "Constants.h" +#include "rts/Constants.h" #include "DerivedConstants.h" -#include "ClosureTypes.h" -#include "StgFun.h" -#include "OSThreads.h" -#include "SMPClosureOps.h" +#include "rts/storage/ClosureTypes.h" +#include "rts/storage/FunTypes.h" +#include "rts/storage/SMPClosureOps.h" +#include "rts/OSThreads.h" /* * Need MachRegs, because some of the RTS code is conditionally * compiled based on REG_R1, REG_R2, etc. */ #define STOLEN_X86_REGS 4 -#include "MachRegs.h" +#include "stg/MachRegs.h" -#include "Liveness.h" -#include "StgLdvProf.h" +#include "rts/storage/Liveness.h" +#include "rts/prof/LDV.h" #undef BLOCK_SIZE #undef MBLOCK_SIZE -#include "Block.h" /* For Bdescr() */ - +#include "rts/storage/Block.h" /* For Bdescr() */ -/* Can't think of a better place to put this. */ -#if SIZEOF_mp_limb_t != SIZEOF_VOID_P -#error mp_limb_t != StgWord: assumptions in PrimOps.cmm are now false -#endif #define MyCapability() (BaseReg - OFFSET_Capability_r) @@ -374,11 +378,12 @@ HP_CHK_GEN(alloc,liveness,reentry); \ TICK_ALLOC_HEAP_NOCTR(alloc); -// allocateLocal() allocates from the nursery, so we check to see +// allocate() 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. +// allocate() - this includes many of the primops. #define MAYBE_GC(liveness,reentry) \ - if (bdescr_link(CurrentNursery) == NULL || CInt[alloc_blocks] >= CInt[alloc_blocks_lim]) { \ + if (bdescr_link(CurrentNursery) == NULL || \ + generation_n_new_large_blocks(W_[g0]) >= CInt[alloc_blocks_lim]) { \ R9 = liveness; \ R10 = reentry; \ HpAlloc = 0; \ @@ -408,6 +413,9 @@ /* The offset of the payload of an array */ #define BYTE_ARR_CTS(arr) ((arr) + SIZEOF_StgArrWords) +/* The number of words allocated in an array payload */ +#define BYTE_ARR_WDS(arr) ROUNDUP_BYTES_TO_WDS(StgArrWords_bytes(arr)) + /* Getting/setting the info pointer of a closure */ #define SET_INFO(p,info) StgHeader_info(p) = info #define GET_INFO(p) StgHeader_info(p) @@ -456,6 +464,9 @@ #define StgFunInfoExtra_bitmap(i) StgFunInfoExtraFwd_bitmap(i) #endif +#define mutArrPtrsCardWords(n) \ + ROUNDUP_BYTES_TO_WDS(((n) + (1 << MUT_ARR_PTRS_CARD_BITS) - 1) >> MUT_ARR_PTRS_CARD_BITS) + /* ----------------------------------------------------------------------------- Voluntary Yields/Blocks