diff options
author | Simon Marlow <simonmar@microsoft.com> | 2006-06-29 13:47:26 +0000 |
---|---|---|
committer | Simon Marlow <simonmar@microsoft.com> | 2006-06-29 13:47:26 +0000 |
commit | 73566e25d75588185b0581722406da5c48965c51 (patch) | |
tree | 5b44477006e139b0b5331c3c94af62afa8b53bc0 /includes | |
parent | 6bf790bab31b9bb8791e2adc46c8ff511392419f (diff) | |
download | haskell-73566e25d75588185b0581722406da5c48965c51.tar.gz |
Replace inline C functions with C-- macros in .cmm code
So that we can build the RTS with the NCG.
Diffstat (limited to 'includes')
-rw-r--r-- | includes/Cmm.h | 28 | ||||
-rw-r--r-- | includes/STM.h | 4 | ||||
-rw-r--r-- | includes/TSO.h | 4 | ||||
-rw-r--r-- | includes/mkDerivedConstants.c | 1 |
4 files changed, 29 insertions, 8 deletions
diff --git a/includes/Cmm.h b/includes/Cmm.h index d95002c5af..e494b60102 100644 --- a/includes/Cmm.h +++ b/includes/Cmm.h @@ -514,4 +514,32 @@ #define TICK_MILLISECS (1000/TICK_FREQUENCY) /* ms per tick */ +#define NO_TREC stg_NO_TREC_closure +#define END_TSO_QUEUE stg_END_TSO_QUEUE_closure + +#define dirtyTSO(tso) \ + StgTSO_flags(tso) = StgTSO_flags(tso) | TSO_DIRTY::I32; + +#define recordMutableCap(p, gen, regs) \ + W_ __bd; \ + W_ mut_list; \ + mut_list = Capability_mut_lists(MyCapability()) + WDS(gen); \ + __bd = W_[mut_list]; \ + if (bdescr_free(__bd) >= bdescr_start(__bd) + BLOCK_SIZE) { \ + W_ __new_bd; \ + "ptr" __new_bd = foreign "C" allocBlock_lock() [regs]; \ + bdescr_link(__new_bd) = __bd; \ + __bd = __new_bd; \ + W_[mut_list] = __bd; \ + } \ + W_ free; \ + free = bdescr_free(__bd); \ + W_[free] = p; \ + bdescr_free(__bd) = free + WDS(1); + +#define recordMutable(p, regs) \ + W_ __p; \ + __p = p; \ + recordMutableCap(__p, TO_W_(bdescr_gen_no(Bdescr(__p))), regs) + #endif /* CMM_H */ diff --git a/includes/STM.h b/includes/STM.h index 4c2b109f73..ebbf193b0b 100644 --- a/includes/STM.h +++ b/includes/STM.h @@ -221,11 +221,7 @@ extern void stmWriteTVar(Capability *cap, #define END_STM_WAIT_QUEUE ((StgTVarWaitQueue *)(void *)&stg_END_STM_WAIT_QUEUE_closure) #define END_STM_CHUNK_LIST ((StgTRecChunk *)(void *)&stg_END_STM_CHUNK_LIST_closure) -#if IN_STG_CODE -#define NO_TREC (stg_NO_TREC_closure) -#else #define NO_TREC ((StgTRecHeader *)(void *)&stg_NO_TREC_closure) -#endif /*----------------------------------------------------------------------*/ diff --git a/includes/TSO.h b/includes/TSO.h index 0c3e4eec38..4621d4ad69 100644 --- a/includes/TSO.h +++ b/includes/TSO.h @@ -248,11 +248,7 @@ extern StgTSO dummy_tso; /* this is the NIL ptr for a TSO queue (e.g. runnable queue) */ -#if IN_STG_CODE -#define END_TSO_QUEUE (stg_END_TSO_QUEUE_closure) -#else #define END_TSO_QUEUE ((StgTSO *)(void*)&stg_END_TSO_QUEUE_closure) -#endif #if defined(PAR) || defined(GRAN) /* this is the NIL ptr for a blocking queue */ diff --git a/includes/mkDerivedConstants.c b/includes/mkDerivedConstants.c index 689851e4e3..efb6c4aed7 100644 --- a/includes/mkDerivedConstants.c +++ b/includes/mkDerivedConstants.c @@ -229,6 +229,7 @@ main(int argc, char *argv[]) field_offset(Capability, r); field_offset(Capability, lock); + struct_field(Capability, mut_lists); struct_field(bdescr, start); struct_field(bdescr, free); |