/* -----------------------------------------------------------------------------
- * $Id: Updates.hc,v 1.11 1999/03/22 11:26:03 simonm Exp $
+ * $Id: Updates.hc,v 1.13 1999/03/26 10:29:06 simonm Exp $
*
* (c) The GHC Team, 1998-1999
*
STGFUN(PAP_entry)
{
nat Words;
-#ifdef PROFILING
- CostCentreStack *CCS_pap;
-#endif
P_ p;
nat i;
StgPAP *pap;
* CAF/DICT.
*/
- CCS_pap = pap->header.prof.ccs;
- CCCS = (IS_CAF_OR_DICT_OR_SUB_CCS(CCS_pap))
- ? Su->header.prof.ccs
- : CCS_pap;
+ CCCS = Su->header.prof.ccs;
+ ENTER_CCS_PAP(pap->header.prof.ccs);
#endif /* PROFILING */
Su = Su->link;
FB_
/* Save the pointer to the function closure that just failed the
- argument satisfaction check
- */
+ * argument satisfaction check
+ */
Fun = R1.cl;
#if defined(GRAN_COUNT)
#endif
/* Just copy the whole block of stack between the stack pointer
- * and the update frame pointer for now. This might include some
- * tagging, which the garbage collector will have to pay attention
- * to, but it's much easier than sorting the words into pointers
- * and non-pointers.
+ * and the update frame pointer.
*/
-
Words = (P_)Su - (P_)Sp;
ASSERT((int)Words >= 0);
#if defined(PROFILING)
/* set "CC_pap" to go in the updatee (see Sansom thesis, p 183) */
-
- CCS_pap = (CostCentreStack *) Fun->header.prof.ccs;
- if (IS_CAF_OR_DICT_OR_SUB_CCS(CCS_pap)) {
- CCS_pap = CCCS;
- }
+ CCS_pap = Fun->header.prof.ccs;
#endif
if (Words == 0) {
* Restore the Cost Centre too (if required); again see Sansom
* thesis p 183. Take the CC out of the update frame if a CAF/DICT.
*/
- CCCS = IS_CAF_OR_DICT_OR_SUB_CCS(CCS_pap)
- ? Su->header.prof.ccs
- : CCS_pap;
+ CCCS = Su->header.prof.ccs;
+ ENTER_CCS_PAP(CCS_pap);
#endif /* PROFILING */
/* Restore Su */
SEQ_FRAME_ENTRY_TEMPLATE(seq_frame_6_entry,ENTRY_CODE(Sp[0]));
SEQ_FRAME_ENTRY_TEMPLATE(seq_frame_7_entry,ENTRY_CODE(Sp[0]));
-VEC_POLY_INFO_TABLE(seq_frame,1, NULL/*srt*/, 0/*srt_off*/, 0/*srt_len*/, SEQ_FRAME);
+VEC_POLY_INFO_TABLE(seq_frame, UPD_FRAME_BITMAP, NULL/*srt*/, 0/*srt_off*/, 0/*srt_len*/, SEQ_FRAME);
/* -----------------------------------------------------------------------------
* The seq infotable
{
FB_
STK_CHK_GEN(sizeofW(StgSeqFrame), NO_PTRS, seq_entry, );
- Sp -= sizeof(StgSeqFrame);
+ Sp -= sizeofW(StgSeqFrame);
PUSH_SEQ_FRAME(Sp);
R1.cl = R1.cl->payload[0];
JMP_(ENTRY_CODE(*R1.p));
break;
case STOP_FRAME:
- barf("uncaught exception");
+ barf("raisezh_fast: STOP_FRAME");
default:
barf("raisezh_fast: weird activation record");