X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=includes%2FCmm.h;h=e494b601023b5d4b672e5ab30413090c02721693;hb=88b35c172f9434fd98b700f706074d142914a8bb;hp=d95002c5afb3389162076c0b7de9cb3ee1cae713;hpb=fb684b4309f0d9b3eb823961c93271a406cd1bf6;p=ghc-hetmet.git diff --git a/includes/Cmm.h b/includes/Cmm.h index d95002c..e494b60 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 */