X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=rts%2FPrimOps.cmm;h=55ada8c45c860b53bba31dc987c17b57d3e26348;hp=c666a4207b2a17e20cf5629ba5dc39058115d27a;hb=2b16fa4791b08b02df8461f3b79d0e44d72d0960;hpb=6cd3d0dc3021fb705fa7603f24afcb19b49f8b3b diff --git a/rts/PrimOps.cmm b/rts/PrimOps.cmm index c666a42..55ada8c 100644 --- a/rts/PrimOps.cmm +++ b/rts/PrimOps.cmm @@ -1455,6 +1455,17 @@ readTVarzh_fast RET_P(result); } +readTVarIOzh_fast +{ + W_ result; + +again: + result = StgTVar_current_value(R1); + if (%INFO_PTR(result) == stg_TREC_HEADER_info) { + goto again; + } + RET_P(result); +} writeTVarzh_fast { @@ -2276,3 +2287,25 @@ getApStackValzh_fast } RET_NP(ok,val); } + +getSparkzh_fast +{ + W_ spark; + +#ifndef THREADED_RTS + RET_NP(0,ghczmprim_GHCziBool_False_closure); +#else + (spark) = foreign "C" tryStealSpark(MyCapability()); + if (spark != 0) { + RET_NP(1,spark); + } else { + (spark) = foreign "C" stealWork (MyCapability()); + if (spark != 0) { + RET_NP(1,spark); + } else { + RET_NP(0,ghczmprim_GHCziBool_False_closure); + + } + } +#endif +}