summaryrefslogtreecommitdiff
path: root/rts/PrimOps.cmm
diff options
context:
space:
mode:
authorSimon Marlow <marlowsd@gmail.com>2012-11-05 10:42:23 +0000
committerSimon Marlow <marlowsd@gmail.com>2012-11-05 14:51:06 +0000
commita307ad56e0a5568d4b9f2c446ba33fcc42f39f47 (patch)
treeb35fc51eba64ffb2b817efc7870ec0a3a0ddfc9b /rts/PrimOps.cmm
parent811a19c95bcb4d97a075134a45fb04f2e81acf4e (diff)
downloadhaskell-a307ad56e0a5568d4b9f2c446ba33fcc42f39f47.tar.gz
small optimisation: inline stmNewTVar()
Diffstat (limited to 'rts/PrimOps.cmm')
-rw-r--r--rts/PrimOps.cmm11
1 files changed, 9 insertions, 2 deletions
diff --git a/rts/PrimOps.cmm b/rts/PrimOps.cmm
index 6ff7dc0cf3..be8bc1572d 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);
}