Use message-passing to implement throwTo in the RTS
[ghc-hetmet.git] / includes / stg / MiscClosures.h
index 1591570..42e878f 100644 (file)
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  *
- * (c) The GHC Team, 1998-2004
+ * (c) The GHC Team, 1998-2009
  *
  * Declarations for various symbols exported by the RTS.
  *
  *
  * See wiki:Commentary/Compiler/Backends/PprC#Prototypes
  *
+ * Do not #include this file directly: #include "Rts.h" instead.
+ *
+ * To understand the structure of the RTS headers, see the wiki:
+ *   http://hackage.haskell.org/trac/ghc/wiki/Commentary/SourceTree/Includes
+ *
  * --------------------------------------------------------------------------*/
 
 #ifndef STGMISCCLOSURES_H
@@ -109,6 +114,8 @@ RTS_INFO(stg_MUT_ARR_PTRS_FROZEN0_info);
 RTS_INFO(stg_MUT_VAR_CLEAN_info);
 RTS_INFO(stg_MUT_VAR_DIRTY_info);
 RTS_INFO(stg_END_TSO_QUEUE_info);
+RTS_INFO(stg_MSG_WAKEUP_info);
+RTS_INFO(stg_MSG_THROWTO_info);
 RTS_INFO(stg_MUT_CONS_info);
 RTS_INFO(stg_catch_info);
 RTS_INFO(stg_PAP_info);
@@ -158,6 +165,8 @@ RTS_ENTRY(stg_MUT_ARR_PTRS_FROZEN0_entry);
 RTS_ENTRY(stg_MUT_VAR_CLEAN_entry);
 RTS_ENTRY(stg_MUT_VAR_DIRTY_entry);
 RTS_ENTRY(stg_END_TSO_QUEUE_entry);
+RTS_ENTRY(stg_MSG_WAKEUP_entry);
+RTS_ENTRY(stg_MSG_THROWTO_entry);
 RTS_ENTRY(stg_MUT_CONS_entry);
 RTS_ENTRY(stg_catch_entry);
 RTS_ENTRY(stg_PAP_entry);
@@ -186,9 +195,6 @@ RTS_ENTRY(stg_catch_retry_frame_ret);
 RTS_ENTRY(stg_atomically_frame_ret);
 RTS_ENTRY(stg_atomically_waiting_frame_ret);
 RTS_ENTRY(stg_catch_stm_frame_ret);
-RTS_ENTRY(stg_catch_frame_ret);
-RTS_ENTRY(stg_catch_entry);
-RTS_ENTRY(stg_raise_entry);
 
 /* closures */
 
@@ -203,8 +209,6 @@ RTS_CLOSURE(stg_END_STM_CHUNK_LIST_closure);
 RTS_CLOSURE(stg_NO_TREC_closure);
 
 RTS_ENTRY(stg_NO_FINALIZER_entry);
-RTS_ENTRY(stg_END_EXCEPTION_LIST_entry);
-RTS_ENTRY(stg_EXCEPTION_CONS_entry);
 
 #if IN_STG_CODE
 extern DLL_IMPORT_RTS StgWordArray stg_CHARLIKE_closure;
@@ -235,7 +239,6 @@ RTS_ENTRY(stg_sel_ret_5_upd_ret);
 RTS_ENTRY(stg_sel_ret_6_upd_ret);
 RTS_ENTRY(stg_sel_ret_7_upd_ret);
 RTS_ENTRY(stg_sel_ret_8_upd_ret);
-RTS_ENTRY(stg_sel_ret_8_upd_ret);
 RTS_ENTRY(stg_sel_ret_9_upd_ret);
 RTS_ENTRY(stg_sel_ret_10_upd_ret);
 RTS_ENTRY(stg_sel_ret_11_upd_ret);
@@ -287,7 +290,6 @@ RTS_ENTRY(stg_sel_ret_5_noupd_ret);
 RTS_ENTRY(stg_sel_ret_6_noupd_ret);
 RTS_ENTRY(stg_sel_ret_7_noupd_ret);
 RTS_ENTRY(stg_sel_ret_8_noupd_ret);
-RTS_ENTRY(stg_sel_ret_8_noupd_ret);
 RTS_ENTRY(stg_sel_ret_9_noupd_ret);
 RTS_ENTRY(stg_sel_ret_10_noupd_ret);
 RTS_ENTRY(stg_sel_ret_11_noupd_ret);
@@ -486,113 +488,114 @@ RTS_FUN(StgReturn);
    PrimOps
    -------------------------------------------------------------------------- */
 
-RTS_FUN(plusIntegerzh_fast);
-RTS_FUN(minusIntegerzh_fast);
-RTS_FUN(timesIntegerzh_fast);
-RTS_FUN(gcdIntegerzh_fast);
-RTS_FUN(quotRemIntegerzh_fast);
-RTS_FUN(quotIntegerzh_fast);
-RTS_FUN(remIntegerzh_fast);
-RTS_FUN(divExactIntegerzh_fast);
-RTS_FUN(divModIntegerzh_fast);
-
-RTS_FUN(cmpIntegerIntzh_fast);
-RTS_FUN(cmpIntegerzh_fast);
-RTS_FUN(integer2Intzh_fast);
-RTS_FUN(integer2Wordzh_fast);
-RTS_FUN(gcdIntegerIntzh_fast);
-RTS_FUN(gcdIntzh_fast);
-
-RTS_FUN(int2Integerzh_fast);
-RTS_FUN(word2Integerzh_fast);
-
-RTS_FUN(decodeFloatzuIntzh_fast);
-RTS_FUN(decodeDoublezh_fast);
-RTS_FUN(decodeDoublezu2Intzh_fast);
-
-RTS_FUN(andIntegerzh_fast);
-RTS_FUN(orIntegerzh_fast);
-RTS_FUN(xorIntegerzh_fast);
-RTS_FUN(complementIntegerzh_fast);
+RTS_FUN(stg_plusIntegerzh);
+RTS_FUN(stg_minusIntegerzh);
+RTS_FUN(stg_timesIntegerzh);
+RTS_FUN(stg_gcdIntegerzh);
+RTS_FUN(stg_quotRemIntegerzh);
+RTS_FUN(stg_quotIntegerzh);
+RTS_FUN(stg_remIntegerzh);
+RTS_FUN(stg_divExactIntegerzh);
+RTS_FUN(stg_divModIntegerzh);
+
+RTS_FUN(stg_cmpIntegerIntzh);
+RTS_FUN(stg_cmpIntegerzh);
+RTS_FUN(stg_integer2Intzh);
+RTS_FUN(stg_integer2Wordzh);
+RTS_FUN(stg_gcdIntegerIntzh);
+RTS_FUN(stg_gcdIntzh);
+
+RTS_FUN(stg_int2Integerzh);
+RTS_FUN(stg_word2Integerzh);
+
+RTS_FUN(stg_decodeFloatzuIntzh);
+RTS_FUN(stg_decodeDoublezh);
+RTS_FUN(stg_decodeDoublezu2Intzh);
+
+RTS_FUN(stg_andIntegerzh);
+RTS_FUN(stg_orIntegerzh);
+RTS_FUN(stg_xorIntegerzh);
+RTS_FUN(stg_complementIntegerzh);
 
 #if SIZEOF_HSINT == 4
 
-RTS_FUN(int64ToIntegerzh_fast);
-RTS_FUN(word64ToIntegerzh_fast);
+RTS_FUN(stg_int64ToIntegerzh);
+RTS_FUN(stg_word64ToIntegerzh);
 
 #endif
 
-RTS_FUN(unsafeThawArrayzh_fast);
-RTS_FUN(newByteArrayzh_fast);
-RTS_FUN(newPinnedByteArrayzh_fast);
-RTS_FUN(newAlignedPinnedByteArrayzh_fast);
-RTS_FUN(newArrayzh_fast);
-
-RTS_FUN(newMutVarzh_fast);
-RTS_FUN(atomicModifyMutVarzh_fast);
-
-RTS_FUN(isEmptyMVarzh_fast);
-RTS_FUN(newMVarzh_fast);
-RTS_FUN(takeMVarzh_fast);
-RTS_FUN(putMVarzh_fast);
-RTS_FUN(tryTakeMVarzh_fast);
-RTS_FUN(tryPutMVarzh_fast);
-
-RTS_FUN(waitReadzh_fast);
-RTS_FUN(waitWritezh_fast);
-RTS_FUN(delayzh_fast);
+RTS_FUN(stg_unsafeThawArrayzh);
+RTS_FUN(stg_newByteArrayzh);
+RTS_FUN(stg_newPinnedByteArrayzh);
+RTS_FUN(stg_newAlignedPinnedByteArrayzh);
+RTS_FUN(stg_newArrayzh);
+
+RTS_FUN(stg_newMutVarzh);
+RTS_FUN(stg_atomicModifyMutVarzh);
+
+RTS_FUN(stg_isEmptyMVarzh);
+RTS_FUN(stg_newMVarzh);
+RTS_FUN(stg_takeMVarzh);
+RTS_FUN(stg_putMVarzh);
+RTS_FUN(stg_tryTakeMVarzh);
+RTS_FUN(stg_tryPutMVarzh);
+
+RTS_FUN(stg_waitReadzh);
+RTS_FUN(stg_waitWritezh);
+RTS_FUN(stg_delayzh);
 #ifdef mingw32_HOST_OS
-RTS_FUN(asyncReadzh_fast);
-RTS_FUN(asyncWritezh_fast);
-RTS_FUN(asyncDoProczh_fast);
+RTS_FUN(stg_asyncReadzh);
+RTS_FUN(stg_asyncWritezh);
+RTS_FUN(stg_asyncDoProczh);
 #endif
 
-RTS_FUN(catchzh_fast);
-RTS_FUN(raisezh_fast);
-RTS_FUN(raiseIOzh_fast);
-
-RTS_FUN(makeStableNamezh_fast);
-RTS_FUN(makeStablePtrzh_fast);
-RTS_FUN(deRefStablePtrzh_fast);
-
-RTS_FUN(forkzh_fast);
-RTS_FUN(forkOnzh_fast);
-RTS_FUN(yieldzh_fast);
-RTS_FUN(killThreadzh_fast);
-RTS_FUN(asyncExceptionsBlockedzh_fast);
-RTS_FUN(blockAsyncExceptionszh_fast);
-RTS_FUN(unblockAsyncExceptionszh_fast);
-RTS_FUN(myThreadIdzh_fast);
-RTS_FUN(labelThreadzh_fast);
-RTS_FUN(isCurrentThreadBoundzh_fast);
-RTS_FUN(threadStatuszh_fast);
-
-RTS_FUN(mkWeakzh_fast);
-RTS_FUN(mkWeakForeignzh_fast);
-RTS_FUN(mkWeakForeignEnvzh_fast);
-RTS_FUN(finalizzeWeakzh_fast);
-RTS_FUN(deRefWeakzh_fast);
-
-RTS_FUN(newBCOzh_fast);
-RTS_FUN(mkApUpd0zh_fast);
-
-RTS_FUN(retryzh_fast);
-RTS_FUN(catchRetryzh_fast);
-RTS_FUN(catchSTMzh_fast);
-RTS_FUN(atomicallyzh_fast);
-RTS_FUN(newTVarzh_fast);
-RTS_FUN(readTVarzh_fast);
-RTS_FUN(readTVarIOzh_fast);
-RTS_FUN(writeTVarzh_fast);
-RTS_FUN(checkzh_fast);
-
-RTS_FUN(unpackClosurezh_fast);
-RTS_FUN(getApStackValzh_fast);
-RTS_FUN(getSparkzh_fast);
-
-RTS_FUN(noDuplicatezh_fast);
-
-RTS_FUN(traceCcszh_fast);
+RTS_FUN(stg_catchzh);
+RTS_FUN(stg_raisezh);
+RTS_FUN(stg_raiseIOzh);
+
+RTS_FUN(stg_makeStableNamezh);
+RTS_FUN(stg_makeStablePtrzh);
+RTS_FUN(stg_deRefStablePtrzh);
+
+RTS_FUN(stg_forkzh);
+RTS_FUN(stg_forkOnzh);
+RTS_FUN(stg_yieldzh);
+RTS_FUN(stg_killThreadzh);
+RTS_FUN(stg_asyncExceptionsBlockedzh);
+RTS_FUN(stg_blockAsyncExceptionszh);
+RTS_FUN(stg_unblockAsyncExceptionszh);
+RTS_FUN(stg_myThreadIdzh);
+RTS_FUN(stg_labelThreadzh);
+RTS_FUN(stg_isCurrentThreadBoundzh);
+RTS_FUN(stg_threadStatuszh);
+
+RTS_FUN(stg_mkWeakzh);
+RTS_FUN(stg_mkWeakForeignzh);
+RTS_FUN(stg_mkWeakForeignEnvzh);
+RTS_FUN(stg_finalizzeWeakzh);
+RTS_FUN(stg_deRefWeakzh);
+
+RTS_FUN(stg_newBCOzh);
+RTS_FUN(stg_mkApUpd0zh);
+
+RTS_FUN(stg_retryzh);
+RTS_FUN(stg_catchRetryzh);
+RTS_FUN(stg_catchSTMzh);
+RTS_FUN(stg_atomicallyzh);
+RTS_FUN(stg_newTVarzh);
+RTS_FUN(stg_readTVarzh);
+RTS_FUN(stg_readTVarIOzh);
+RTS_FUN(stg_writeTVarzh);
+RTS_FUN(stg_checkzh);
+
+RTS_FUN(stg_unpackClosurezh);
+RTS_FUN(stg_getApStackValzh);
+RTS_FUN(stg_getSparkzh);
+
+RTS_FUN(stg_noDuplicatezh);
+
+RTS_FUN(stg_traceCcszh);
+RTS_FUN(stg_traceEventzh);
 
 /* Other misc stuff */
 // See wiki:Commentary/Compiler/Backends/PprC#Prototypes
@@ -617,7 +620,7 @@ extern StgWord stg_ap_stack_entries[];
 extern StgWord stg_stack_save_entries[];
 
 // Storage.c
-extern unsigned int RTS_VAR(alloc_blocks);
+extern unsigned int RTS_VAR(g0);
 extern unsigned int RTS_VAR(alloc_blocks_lim);
 extern StgWord RTS_VAR(weak_ptr_list);
 extern StgWord RTS_VAR(atomic_modify_mutvar_mutex);