* - Hp += n ==> Hp_adj(n)
* - R1.i ==> R1 (similarly for R1.w, R1.cl etc.)
* - You need to explicitly dereference variables; eg.
- * context_switch ==> CInt[context_switch]
+ * alloc_blocks ==> CInt[alloc_blocks]
* - convert all word offsets into byte offsets:
* - e ==> WDS(e)
* - sizeofW(StgFoo) ==> SIZEOF_StgFoo
#define I16 bits16
#define I32 bits32
#define I64 bits64
+#define P_ gcptr
#if SIZEOF_VOID_P == 4
#define W_ bits32
#define ENTER() \
again: \
W_ info; \
- if (GETTAG(R1) != 0) { \
+ if (GETTAG(P1) != 0) { \
jump %ENTRY_CODE(Sp(0)); \
} \
- info = %INFO_PTR(R1); \
+ info = %INFO_PTR(P1); \
switch [INVALID_OBJECT .. N_CLOSURE_TYPES] \
(TO_W_( %INFO_TYPE(%STD_INFO(info)) )) { \
case \
IND_OLDGEN_PERM, \
IND_STATIC: \
{ \
- R1 = StgInd_indirectee(R1); \
+ P1 = StgInd_indirectee(P1); \
goto again; \
} \
case \
#include "ClosureTypes.h"
#include "StgFun.h"
#include "OSThreads.h"
-#include "SMP.h"
+#include "SMPClosureOps.h"
/*
* Need MachRegs, because some of the RTS code is conditionally
#define END_TSO_QUEUE stg_END_TSO_QUEUE_closure
#define END_INVARIANT_CHECK_QUEUE stg_END_INVARIANT_CHECK_QUEUE_closure
-#define dirtyTSO(tso) \
- StgTSO_flags(tso) = StgTSO_flags(tso) | TSO_DIRTY::I32;
-
#define recordMutableCap(p, gen, regs) \
W_ __bd; \
W_ mut_list; \
bdescr_free(__bd) = free + WDS(1);
#define recordMutable(p, regs) \
- W_ __p; \
+ P_ __p; \
W_ __bd; \
W_ __gen; \
__p = p; \