[project @ 1999-06-24 13:10:31 by simonmar]
[ghc-hetmet.git] / ghc / includes / StgTicky.h
index bd4fa1c..dc0a478 100644 (file)
@@ -1,5 +1,5 @@
 /* ----------------------------------------------------------------------------
- * $Id: StgTicky.h,v 1.3 1999/02/05 16:02:30 simonm Exp $
+ * $Id: StgTicky.h,v 1.5 1999/06/24 13:10:31 simonmar Exp $
  *
  * (c) The AQUA project, Glasgow University, 1994-1997
  * (c) The GHC Team, 1998-1999
        ALLOC_FUN_gds += (g);   ALLOC_FUN_slp += (s);   \
        TICK_ALLOC_HISTO(FUN,_HS,g,s)
 
-#define TICK_ALLOC_THK(g,s)                            \
-       ALLOC_THK_ctr++;        ALLOC_THK_adm += _HS;   \
+#define TICK_ALLOC_UP_THK(g,s)                          \
+       ALLOC_UP_THK_ctr++;     ALLOC_THK_adm += _HS;   \
+       ALLOC_THK_gds += (g);   ALLOC_THK_slp += (s);   \
+       TICK_ALLOC_HISTO(THK,_HS,g,s)
+
+#define TICK_ALLOC_SE_THK(g,s)                          \
+       ALLOC_SE_THK_ctr++;     ALLOC_THK_adm += _HS;   \
        ALLOC_THK_gds += (g);   ALLOC_THK_slp += (s);   \
        TICK_ALLOC_HISTO(THK,_HS,g,s)
 
 
 #define TICK_ENT_THK()         ENT_THK_ctr++         /* thunk */
 #define TICK_ENT_FUN_STD()     ENT_FUN_STD_ctr++     /* std entry pt */
-#define TICK_ENT_FUN_DIRECT(n)         ENT_FUN_DIRECT_ctr++  /* fast entry pt */
+
+struct ent_counter {
+    unsigned   registeredp:16, /* 0 == no, 1 == yes */
+               arity:16,       /* arity (static info) */
+               stk_args:16;    /* # of args off stack */
+                               /* (rest of args are in registers) */
+    StgChar    *f_str;         /* name of the thing */
+    StgChar    *f_arg_kinds;   /* info about the args types */
+    I_         ctr;            /* the actual counter */
+    struct ent_counter *link;  /* link to chain them all together */
+};
+
+#define TICK_ENT_FUN_DIRECT(f_ct, f_str, f_arity, f_args, f_arg_kinds) \
+       {                                                       \
+       static struct ent_counter f_ct                          \
+         = { 0,                                                \
+             (f_arity), (f_args), (f_str), (f_arg_kinds),      \
+             0, NULL };                                        \
+       if ( ! f_ct.registeredp ) {                             \
+           /* hook this one onto the front of the list */      \
+           f_ct.link = ticky_entry_ctrs;                       \
+           ticky_entry_ctrs = & (f_ct);                        \
+                                                               \
+           /* mark it as "registered" */                       \
+           f_ct.registeredp = 1;                               \
+       }                                                       \
+       f_ct.ctr += 1;                                          \
+       }                                                       \
+       ENT_FUN_DIRECT_ctr++ /* the old boring one */
+
+extern struct ent_counter *ticky_entry_ctrs;
 
 #define TICK_ENT_CON(n)                ENT_CON_ctr++         /* enter constructor */
 #define TICK_ENT_IND(n)                ENT_IND_ctr++         /* enter indirection */
+#define TICK_ENT_PERM_IND(n)    ENT_PERM_IND_ctr++    /* enter permanent indirection */
 #define TICK_ENT_PAP(n)                ENT_PAP_ctr++         /* enter PAP */
 #define TICK_ENT_AP_UPD(n)     ENT_AP_UPD_ctr++      /* enter AP_UPD */
 #define TICK_ENT_BH()          ENT_BH_ctr++          /* enter BLACKHOLE */
 
+
 /* -----------------------------------------------------------------------------
    Returns
    -------------------------------------------------------------------------- */
    -------------------------------------------------------------------------- */
 
 #define TICK_UPDF_OMITTED()    UPDF_OMITTED_ctr++
-#define TICK_UPDF_PUSHED()     UPDF_PUSHED_ctr++
+#define TICK_UPDF_PUSHED(tgt,inf)      UPDF_PUSHED_ctr++ \
+/*                              ; fprintf(stderr,"UPDF_PUSHED:%p:%p\n",tgt,inf) */
 #define TICK_SEQF_PUSHED()      SEQF_PUSHED_ctr++
 #define TICK_CATCHF_PUSHED()    CATCHF_PUSHED_ctr++
 #define TICK_UPDF_RCC_PUSHED() UPDF_RCC_PUSHED_ctr++
 /* For the generational collector: 
  */
 #define TICK_UPD_NEW_IND()             UPD_NEW_IND_ctr++
+#define TICK_UPD_NEW_PERM_IND(tgt)     UPD_NEW_PERM_IND_ctr++ \
+/*                                      ; fprintf(stderr,"UPD_NEW_PERM:%p\n",tgt) */
 #define TICK_UPD_OLD_IND()             UPD_OLD_IND_ctr++                       
+#define TICK_UPD_OLD_PERM_IND()                UPD_OLD_PERM_IND_ctr++                  
+
+/* Count blackholes:
+ */
+#define TICK_UPD_BH_UPDATABLE()         UPD_BH_UPDATABLE_ctr++
+#define TICK_UPD_BH_SINGLE_ENTRY()      UPD_BH_SINGLE_ENTRY_ctr++
+#define TICK_UPD_CAF_BH_UPDATABLE(s)                          \
+     UPD_CAF_BH_UPDATABLE_ctr++                               \
+/*   ; fprintf(stderr,"TICK_UPD_CAF_BH_UPDATABLE(%s)\n",s) */
+#define TICK_UPD_CAF_BH_SINGLE_ENTRY(s)                       \
+     UPD_CAF_BH_SINGLE_ENTRY_ctr++                            \
+/*   ; fprintf(stderr,"TICK_UPD_CAF_BH_SINGLE_ENTRY(%s)\n",s) */
+
 
 /* -----------------------------------------------------------------------------
    Garbage collection counters
@@ -283,7 +336,8 @@ EXTERN unsigned long ALLOC_FUN_hst[5]
 #endif
 ;
 
-EXTERN unsigned long ALLOC_THK_ctr INIT(0);
+EXTERN unsigned long ALLOC_UP_THK_ctr INIT(0);
+EXTERN unsigned long ALLOC_SE_THK_ctr INIT(0);
 EXTERN unsigned long ALLOC_THK_adm INIT(0);
 EXTERN unsigned long ALLOC_THK_gds INIT(0);
 EXTERN unsigned long ALLOC_THK_slp INIT(0);
@@ -391,6 +445,7 @@ EXTERN unsigned long ENT_FUN_STD_ctr INIT(0);
 EXTERN unsigned long ENT_FUN_DIRECT_ctr INIT(0);
 EXTERN unsigned long ENT_CON_ctr INIT(0);
 EXTERN unsigned long ENT_IND_ctr INIT(0);
+EXTERN unsigned long ENT_PERM_IND_ctr INIT(0);
 EXTERN unsigned long ENT_PAP_ctr INIT(0);
 EXTERN unsigned long ENT_AP_UPD_ctr INIT(0);
 EXTERN unsigned long ENT_BH_ctr INIT(0);
@@ -458,7 +513,14 @@ EXTERN unsigned long UPD_PAP_IN_NEW_hst[9]
 ;
 
 EXTERN unsigned long UPD_NEW_IND_ctr INIT(0);
+EXTERN unsigned long UPD_NEW_PERM_IND_ctr INIT(0);
 EXTERN unsigned long UPD_OLD_IND_ctr INIT(0);
+EXTERN unsigned long UPD_OLD_PERM_IND_ctr INIT(0);
+
+EXTERN unsigned long UPD_BH_UPDATABLE_ctr INIT(0);
+EXTERN unsigned long UPD_BH_SINGLE_ENTRY_ctr INIT(0);
+EXTERN unsigned long UPD_CAF_BH_UPDATABLE_ctr INIT(0);
+EXTERN unsigned long UPD_CAF_BH_SINGLE_ENTRY_ctr INIT(0);
 
 EXTERN unsigned long GC_SEL_ABANDONED_ctr INIT(0);
 EXTERN unsigned long GC_SEL_MINOR_ctr INIT(0);
@@ -480,7 +542,8 @@ EXTERN unsigned long GC_WORDS_COPIED_ctr INIT(0);
 #define TICK_ALLOC_HEAP(words)
 
 #define TICK_ALLOC_FUN(g,s)
-#define TICK_ALLOC_THK(g,s)
+#define TICK_ALLOC_UP_THK(g,s)
+#define TICK_ALLOC_SE_THK(g,s)
 #define TICK_ALLOC_CON(g,s)
 #define TICK_ALLOC_TUP(g,s)
 #define TICK_ALLOC_BH(g,s)
@@ -500,6 +563,7 @@ EXTERN unsigned long GC_WORDS_COPIED_ctr INIT(0);
                                
 #define TICK_ENT_CON(n)
 #define TICK_ENT_IND(n)
+#define TICK_ENT_PERM_IND(n)
 #define TICK_ENT_PAP(n)
 #define TICK_ENT_AP_UPD(n)
 #define TICK_ENT_BH()
@@ -513,7 +577,7 @@ EXTERN unsigned long GC_WORDS_COPIED_ctr INIT(0);
 #define TICK_VEC_RETURN(n)
 
 #define TICK_UPDF_OMITTED()
-#define TICK_UPDF_PUSHED()
+#define TICK_UPDF_PUSHED(tgt,inf)
 #define TICK_SEQF_PUSHED()
 #define TICK_CATCHF_PUSHED()
 #define TICK_UPDF_RCC_PUSHED()
@@ -526,7 +590,14 @@ EXTERN unsigned long GC_WORDS_COPIED_ctr INIT(0);
 #define TICK_UPD_PAP_IN_PLACE()
 
 #define TICK_UPD_NEW_IND()
+#define TICK_UPD_NEW_PERM_IND(tgt)
 #define TICK_UPD_OLD_IND()
+#define TICK_UPD_OLD_PERM_IND()
+
+#define TICK_UPD_BH_UPDATABLE()
+#define TICK_UPD_BH_SINGLE_ENTRY()
+#define TICK_UPD_CAF_BH_UPDATABLE()
+#define TICK_UPD_CAF_BH_SINGLE_ENTRY()
 
 #define TICK_GC_SEL_ABANDONED()
 #define TICK_GC_SEL_MINOR()