allow build settings to be overriden by adding mk/validate.mk
[ghc-hetmet.git] / includes / Cmm.h
index 783b0e4..b23a37b 100644 (file)
  * Note the syntax is slightly different to the C version of this macro.
  */
 #ifdef DEBUG
-#define IF_DEBUG(c,s)  if (RtsFlags_DebugFlags_##c(RtsFlags)) { s; }
+#define IF_DEBUG(c,s)  if (RtsFlags_DebugFlags_##c(RtsFlags) != 0::I32) { s; }
 #else
 #define IF_DEBUG(c,s)  /* nothing */
 #endif
 #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 */