X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=rts%2FStgStartup.cmm;h=b5a5cdcb2f71ad92aff6eac7cf9fadade5491487;hp=2f2a759c81b752b0f4c7f686b958ed82fb127f93;hb=45202530612593a0ba7a6c559a38dc1ff26670a4;hpb=0065d5ab628975892cea1ec7303f968c3338cbe1 diff --git a/rts/StgStartup.cmm b/rts/StgStartup.cmm index 2f2a759..b5a5cdc 100644 --- a/rts/StgStartup.cmm +++ b/rts/StgStartup.cmm @@ -34,33 +34,14 @@ /* ----------------------------------------------------------------------------- Returning from the STG world. - - This is a polymorphic return address, meaning that any old constructor - can be returned, we don't care (actually, it's probably going to be - an IOok constructor, which will indirect through the vector table - slot 0). -------------------------------------------------------------------------- */ +INFO_TABLE_RET( stg_stop_thread, STOP_FRAME, #if defined(PROFILING) -#define STOP_THREAD_BITMAP 3 -#define STOP_THREAD_WORDS 2 -#else -#define STOP_THREAD_BITMAP 0 -#define STOP_THREAD_WORDS 0 + W_ unused, + W_ unused #endif - -/* A polymorhpic return address, where all the vector slots point to the - direct entry point. */ -INFO_TABLE_RET( stg_stop_thread, STOP_THREAD_WORDS, STOP_THREAD_BITMAP, - STOP_FRAME, - RET_LBL(stg_stop_thread), - RET_LBL(stg_stop_thread), - RET_LBL(stg_stop_thread), - RET_LBL(stg_stop_thread), - RET_LBL(stg_stop_thread), - RET_LBL(stg_stop_thread), - RET_LBL(stg_stop_thread), - RET_LBL(stg_stop_thread) ) +) { /* The final exit. @@ -143,6 +124,13 @@ stg_returnToSchedButFirst jump R2; } +stg_threadFinished +{ + StgRegTable_rRet(BaseReg) = ThreadFinished; + R1 = BaseReg; + jump StgReturn; +} + /* ----------------------------------------------------------------------------- Strict IO application - performing an IO action and entering its result. @@ -154,9 +142,10 @@ stg_returnToSchedButFirst forceIO takes care of this, performing the IO action and entering the results that comes back. + ------------------------------------------------------------------------- */ -INFO_TABLE_RET( stg_forceIO, 0/*size*/, 0/*bitmap*/, RET_SMALL) +INFO_TABLE_RET( stg_forceIO, RET_SMALL) #ifdef REG_R1 { @@ -180,7 +169,7 @@ INFO_TABLE_RET( stg_forceIO, 0/*size*/, 0/*bitmap*/, RET_SMALL) is a register or not. ------------------------------------------------------------------------- */ -INFO_TABLE_RET( stg_noforceIO, 0/*size*/, 0/*bitmap*/, RET_SMALL ) +INFO_TABLE_RET( stg_noforceIO, RET_SMALL ) #ifdef REG_R1 {