Repository : ssh://darcs.haskell.org//srv/darcs/ghc On branch : master
http://hackage.haskell.org/trac/ghc/changeset/a307ad56e0a5568d4b9f2c446ba33fcc42f39f47 >--------------------------------------------------------------- commit a307ad56e0a5568d4b9f2c446ba33fcc42f39f47 Author: Simon Marlow <marlo...@gmail.com> Date: Mon Nov 5 10:42:23 2012 +0000 small optimisation: inline stmNewTVar() >--------------------------------------------------------------- includes/mkDerivedConstants.c | 3 +++ rts/PrimOps.cmm | 11 +++++++++-- rts/STM.c | 15 --------------- rts/STM.h | 8 -------- 4 files changed, 12 insertions(+), 25 deletions(-) diff --git a/includes/mkDerivedConstants.c b/includes/mkDerivedConstants.c index 79242d9..7009a3f 100644 --- a/includes/mkDerivedConstants.c +++ b/includes/mkDerivedConstants.c @@ -631,7 +631,10 @@ main(int argc, char *argv[]) closure_field(StgTVarWatchQueue, next_queue_entry); closure_field(StgTVarWatchQueue, prev_queue_entry); + closure_size(StgTVar); closure_field(StgTVar, current_value); + closure_field(StgTVar, first_watch_queue_entry); + closure_field(StgTVar, num_updates); closure_size(StgWeak); closure_field(StgWeak,link); diff --git a/rts/PrimOps.cmm b/rts/PrimOps.cmm index 6ff7dc0..be8bc15 100644 --- a/rts/PrimOps.cmm +++ b/rts/PrimOps.cmm @@ -1062,8 +1062,15 @@ stg_newTVarzh (P_ init) { W_ tv; - MAYBE_GC_P (stg_newTVarzh, init); - ("ptr" tv) = ccall stmNewTVar(MyCapability() "ptr", init "ptr"); + ALLOC_PRIM_P (SIZEOF_StgTVar, stg_newTVarzh, init); + + tv = Hp - SIZEOF_StgTVar + WDS(1); + SET_HDR (tv, stg_TVAR_info, CCCS); + + StgTVar_current_value(tv) = init; + StgTVar_first_watch_queue_entry(tv) = stg_END_STM_WATCH_QUEUE_closure; + StgTVar_num_updates(tv) = 0; + return (tv); } diff --git a/rts/STM.c b/rts/STM.c index f8f56a2..568a401 100644 --- a/rts/STM.c +++ b/rts/STM.c @@ -1648,18 +1648,3 @@ void stmWriteTVar(Capability *cap, } /*......................................................................*/ - -StgTVar *stmNewTVar(Capability *cap, - StgClosure *new_value) { - StgTVar *result; - result = (StgTVar *)allocate(cap, sizeofW(StgTVar)); - SET_HDR (result, &stg_TVAR_info, CCS_SYSTEM); - result -> current_value = new_value; - result -> first_watch_queue_entry = END_STM_WATCH_QUEUE; -#if defined(THREADED_RTS) - result -> num_updates = 0; -#endif - return result; -} - -/*......................................................................*/ diff --git a/rts/STM.h b/rts/STM.h index dd11bb8..799cac3 100644 --- a/rts/STM.h +++ b/rts/STM.h @@ -183,14 +183,6 @@ StgBool stmReWait(Capability *cap, StgTSO *tso); /*---------------------------------------------------------------------- - TVar management operations - -------------------------- -*/ - -StgTVar *stmNewTVar(Capability *cap, StgClosure *new_value); - -/*---------------------------------------------------------------------- - Data access operations ---------------------- */ _______________________________________________ Cvs-ghc mailing list Cvs-ghc@haskell.org http://www.haskell.org/mailman/listinfo/cvs-ghc