#include "DerivedConstants.h"
#include "ClosureTypes.h"
#include "StgFun.h"
+#include "OSThreads.h"
+#include "SMP.h"
/*
* Need MachRegs, because some of the RTS code is conditionally
if (bdescr_link(CurrentNursery) == NULL || CInt[alloc_blocks] >= CInt[alloc_blocks_lim]) { \
R9 = liveness; \
R10 = reentry; \
+ HpAlloc = 0; \
jump stg_gc_gen_hp; \
}
#define TICK_SLOW_CALL_ppppp() TICK_BUMP(SLOW_CALL_ppppp_ctr)
#define TICK_SLOW_CALL_pppppp() TICK_BUMP(SLOW_CALL_pppppp_ctr)
-#ifdef TICKY_TICKY
-#define TICK_HISTO_BY(histo,n,i) \
- W_ __idx; \
- __idx = (n); \
- if (__idx > 8) { \
- __idx = 8; \
- } \
- CLong[histo##_hst + _idx*SIZEOF_LONG] \
- = histo##_hst + __idx*SIZEOF_LONG] + i;
-#else
+/* NOTE: TICK_HISTO_BY and TICK_HISTO
+ currently have no effect.
+ The old code for it didn't typecheck and I
+ just commented it out to get ticky to work.
+ - krc 1/2007 */
+
#define TICK_HISTO_BY(histo,n,i) /* nothing */
-#endif
#define TICK_HISTO(histo,n) TICK_HISTO_BY(histo,n,1)
Misc junk
-------------------------------------------------------------------------- */
-#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 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; \
+ 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 */