/* ----------------------------------------------------------------------------
- * $Id: StgTicky.h,v 1.4 1999/05/11 16:47:42 keithw 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
#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 */
/* -----------------------------------------------------------------------------
- * $Id: Ticky.c,v 1.7 1999/05/11 16:49:44 keithw Exp $
+ * $Id: Ticky.c,v 1.8 1999/06/24 13:10:32 simonmar Exp $
*
* (c) The AQUA project, Glasgow University, 1992-1997
* (c) The GHC Team, 1998-1999
fprintf(tf,"\nTotal bytes copied during GC: %ld\n",
GC_WORDS_COPIED_ctr * sizeof(W_));
-#if 0
printRegisteredCounterInfo(tf);
-#endif
fprintf(tf,"\n**************************************************\n");
PR_CTR(GC_WORDS_COPIED_ctr);
}
-#if 0
/* Data structure used in ``registering'' one of these counters. */
-struct ent_counter *ListOfEntryCtrs = NULL; /* root of list of them */
+struct ent_counter *ticky_entry_ctrs = NULL; /* root of list of them */
/* To print out all the registered-counter info: */
{
struct ent_counter *p;
- if ( ListOfEntryCtrs != NULL ) {
+ if ( ticky_entry_ctrs != NULL ) {
fprintf(tf,"\n**************************************************\n");
}
- for (p = ListOfEntryCtrs; p != NULL; p = p->link) {
- /* common stuff first; then the wrapper info if avail */
- fprintf(tf, "%-40s%u\t%u\t%u\t%-16s%ld",
+ for (p = ticky_entry_ctrs; p != NULL; p = p->link) {
+ fprintf(tf, "%-40s%u\t%u\t%-16s%ld",
p->f_str,
p->arity,
- p->Astk_args,
- p->Bstk_args,
+ p->stk_args,
p->f_arg_kinds,
p->ctr);
- if ( p->wrap_str == NULL ) {
- fprintf(tf, "\n");
+ fprintf(tf, "\n");
- } else {
- fprintf(tf, "\t%s\t%s\n",
- p->wrap_str,
- p->wrap_arg_kinds);
- }
}
}
-#endif
#endif /* TICKY_TICKY */