X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fincludes%2FStgTicky.h;h=dc0a47850c1e446a455cbf516ef4b922f36a8865;hb=1e295cefb7bf257899dee252917c40f5850e8627;hp=705fdfd92365cc2bfa6c57b5bf046fbef897396a;hpb=20bb52552865ed3d3c18dec649a057312c57bf9d;p=ghc-hetmet.git diff --git a/ghc/includes/StgTicky.h b/ghc/includes/StgTicky.h index 705fdfd..dc0a478 100644 --- a/ghc/includes/StgTicky.h +++ b/ghc/includes/StgTicky.h @@ -1,5 +1,5 @@ /* ---------------------------------------------------------------------------- - * $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 @@ -126,7 +126,37 @@ #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 */