#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 */
(TO_W_( %INFO_TYPE(%STD_INFO(info)) )) { \
case \
IND, \
- IND_OLDGEN, \
IND_PERM, \
- IND_OLDGEN_PERM, \
IND_STATIC: \
{ \
P1 = StgInd_indirectee(P1); \
/* 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)
#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