+ Sp -= 2;
+ Sp[1] = R1.w;
+ Sp[0] = (W_)&stg_enter_info;
+ BLOCK_GENERIC;
+ FE_
+}
+
+/* -----------------------------------------------------------------------------
+ * takeMVar/putMVar-specific blocks
+ *
+ * Stack layout for a thread blocked in takeMVar:
+ *
+ * ret. addr
+ * ptr to MVar (R1)
+ * stg_block_takemvar_info
+ *
+ * Stack layout for a thread blocked in putMVar:
+ *
+ * ret. addr
+ * ptr to Value (R2)
+ * ptr to MVar (R1)
+ * stg_block_putmvar_info
+ *
+ * See PrimOps.hc for a description of the workings of take/putMVar.
+ *
+ * -------------------------------------------------------------------------- */
+
+INFO_TABLE_RET( stg_block_takemvar_info, stg_block_takemvar_ret,
+ MK_SMALL_BITMAP(1/*framesize*/, 0/*bitmap*/),
+ 0/*SRT*/, 0/*SRT_OFF*/, 0/*SRT_BITMAP*/,
+ RET_SMALL,, IF_, 0, 0);
+
+IF_(stg_block_takemvar_ret)
+{
+ FB_
+ R1.w = Sp[1];
+ Sp += 2;
+ JMP_(takeMVarzh_fast);
+ FE_
+}
+
+FN_(stg_block_takemvar)
+{
+ FB_
+ Sp -= 2;
+ Sp[1] = R1.w;
+ Sp[0] = (W_)&stg_block_takemvar_info;
+ BLOCK_GENERIC;
+ FE_
+}
+
+INFO_TABLE_RET( stg_block_putmvar_info, stg_block_putmvar_ret,
+ MK_SMALL_BITMAP(2/*framesize*/, 0/*bitmap*/),
+ 0/*SRT*/, 0/*SRT_OFF*/, 0/*SRT_BITMAP*/,
+ RET_SMALL,, IF_, 0, 0);
+
+IF_(stg_block_putmvar_ret)
+{
+ FB_
+ R2.w = Sp[2];
+ R1.w = Sp[1];
+ Sp += 3;
+ JMP_(putMVarzh_fast);