X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Frts%2FApply.cmm;h=6678a6347110a6f130bc2216b9d8db0793f7ac34;hb=960a5e6a6f604aa01f5f74b80fb0f61ceffd7ed3;hp=a647b3754a32ce026994a095d9ea216b9896a7bd;hpb=51e758f45a08f4e7e80a3eccf0f26ff04a50fa4a;p=ghc-hetmet.git diff --git a/ghc/rts/Apply.cmm b/ghc/rts/Apply.cmm index a647b37..6678a63 100644 --- a/ghc/rts/Apply.cmm +++ b/ghc/rts/Apply.cmm @@ -15,28 +15,13 @@ /* ---------------------------------------------------------------------------- * Evaluate a closure and return it. * - * stg_ap_0_info <--- Sp - * - * NOTE: this needs to be a polymorphic return point, because we can't - * be sure that the thing being evaluated is not a function. + * There isn't an info table / return address version of stg_ap_0, because + * everything being returned is guaranteed evaluated, so it would be a no-op. */ -#if MAX_VECTORED_RTN > 8 -#error MAX_VECTORED_RTN has changed: please modify stg_ap_0 too. -#endif - STRING(stg_ap_0_ret_str,"stg_ap_0_ret... ") -INFO_TABLE_RET( stg_ap_0, - 0/*framsize*/, 0/*bitmap*/, RET_SMALL, - RET_LBL(stg_ap_0), - RET_LBL(stg_ap_0), - RET_LBL(stg_ap_0), - RET_LBL(stg_ap_0), - RET_LBL(stg_ap_0), - RET_LBL(stg_ap_0), - RET_LBL(stg_ap_0), - RET_LBL(stg_ap_0) ) +stg_ap_0_fast { // fn is in R1, no args on the stack @@ -45,11 +30,10 @@ INFO_TABLE_RET( stg_ap_0, foreign "C" printClosure(R1 "ptr") [R1]); IF_DEBUG(sanity, - foreign "C" checkStackChunk(Sp+WDS(1) "ptr", + foreign "C" checkStackChunk(Sp "ptr", CurrentTSO + TSO_OFFSET_StgTSO_stack + WDS(StgTSO_stack_size(CurrentTSO)) "ptr") [R1]); - Sp_adj(1); ENTER(); } @@ -74,6 +58,9 @@ INFO_TABLE_RET( stg_ap_0, -------------------------------------------------------------------------- */ INFO_TABLE(stg_PAP,/*special layout*/0,0,PAP,"PAP","PAP") +{ foreign "C" barf("PAP object entered!"); } + +stg_PAP_apply { W_ Words; W_ pap; @@ -264,7 +251,7 @@ INFO_TABLE(stg_AP_STACK,/*special layout*/0,0,AP_STACK,"AP_STACK","AP_STACK") // Reload the stack W_ i; W_ p; - p = ap + SIZEOF_StgThunkHeader + OFFSET_StgAP_STACK_payload; + p = ap + SIZEOF_StgHeader + OFFSET_StgAP_STACK_payload; i = 0; for: if (i < Words) {