[project @ 2002-10-15 08:56:50 by simonpj]
[ghc-hetmet.git] / ghc / rts / StgStdThunks.hc
index d25fcd5..4fb67ce 100644 (file)
@@ -1,5 +1,5 @@
 /* -----------------------------------------------------------------------------
- * $Id: StgStdThunks.hc,v 1.13 2000/11/14 12:51:51 simonmar Exp $
+ * $Id: StgStdThunks.hc,v 1.20 2002/03/01 18:28:15 keithw Exp $
  *
  * (c) The GHC Team, 1998-2000
  *
@@ -7,9 +7,9 @@
  *
  * ---------------------------------------------------------------------------*/
 
+#include "Stg.h"
 #include "Rts.h"
 #include "StoragePriv.h"
-#include "HeapStackCheck.h"
 
 /* -----------------------------------------------------------------------------
    The code for a thunk that simply extracts a field from a
@@ -32,7 +32,7 @@
 #define SAVE_CCCS(fs)          CCS_HDR(Sp-fs)=CCCS
 #define GET_SAVED_CCCS  RESTORE_CCCS(CCS_HDR(Sp))
 #define ENTER_CCS(p)    ENTER_CCS_TCL(p)
-#define RET_BITMAP 1
+#define RET_BITMAP 3
 #else
 #define SAVE_CCCS(fs)   /* empty */
 #define GET_SAVED_CCCS  /* empty */
   INFO_TABLE_SELECTOR(stg_sel_##offset##_upd_info, stg_sel_##offset##_upd_entry, offset,, EF_, "stg_sel" #offset "_upd_entry", "stg_sel" #offset "_upd_entry");\
   EF_(stg_sel_##offset##_upd_entry) {                                  \
     FB_                                                                        \
+      TICK_ENT_DYN_THK();  /* is it static or dynamic?? */              \
       STK_CHK_NP(UPD_FRAME_SIZE,1,);                                   \
       UPD_BH_UPDATABLE(&stg_sel_##offset##_upd_info);                  \
+      LDV_ENTER(R1.cl);                                                        \
       PUSH_UPD_FRAME(R1.p,0);                                          \
       ENTER_CCS(R1.p);                                                 \
       SAVE_CCCS(UPD_FRAME_SIZE);                                       \
@@ -101,8 +103,11 @@ SELECTOR_CODE_UPD(15);
   INFO_TABLE_SELECTOR(stg_sel_##offset##_noupd_info, stg_sel_##offset##_noupd_entry, offset,, EF_, "stg_sel" #offset "_noupd_entry", "stg_sel" #offset "_noupd_entry");\
   EF_(stg_sel_##offset##_noupd_entry) {                                        \
     FB_                                                                        \
+      TICK_ENT_DYN_THK();  /* is it static or dynamic?? */              \
       STK_CHK_NP(NOUPD_FRAME_SIZE,1,)                                  \
       UPD_BH_SINGLE_ENTRY(&stg_sel_##offset##_noupd_info);             \
+      LDV_ENTER(R1.cl);                                                        \
+      TICK_UPDF_OMITTED();                                             \
       ENTER_CCS(R1.p);                                                 \
       SAVE_CCCS(NOUPD_FRAME_SIZE);                                     \
       Sp[-NOUPD_FRAME_SIZE]=(W_)&stg_sel_ret_##offset##_noupd_info;    \
@@ -158,11 +163,13 @@ FN_(stg_ap_8_upd_entry);
  * in the compiler that means stg_ap_1 is generated occasionally (ToDo)
  */
 
-INFO_TABLE_SRT(stg_ap_1_upd_info,stg_ap_1_upd_entry,1,0,0,0,0,THUNK,,EF_,"stg_ap_1_upd_info","stg_ap_1_upd_info");
+INFO_TABLE_SRT(stg_ap_1_upd_info,stg_ap_1_upd_entry,1,1,0,0,0,THUNK_1_0,,EF_,"stg_ap_1_upd_info","stg_ap_1_upd_info");
 FN_(stg_ap_1_upd_entry) {
   FB_
+  TICK_ENT_DYN_THK();  /* is it static or dynamic?? */
   STK_CHK_NP(sizeofW(StgUpdateFrame),1,);
   UPD_BH_UPDATABLE(&stg_ap_1_upd_info);
+  LDV_ENTER(R1.cl);
   ENTER_CCS(R1.p);
   PUSH_UPD_FRAME(R1.p,0);
   R1.p=(P_)(R1.cl->payload[0]);
@@ -171,11 +178,13 @@ FN_(stg_ap_1_upd_entry) {
   FE_
 }
 
-INFO_TABLE_SRT(stg_ap_2_upd_info,stg_ap_2_upd_entry,2,0,0,0,0,THUNK,,EF_,"stg_ap_2_upd_info","stg_ap_2_upd_info");
+INFO_TABLE_SRT(stg_ap_2_upd_info,stg_ap_2_upd_entry,2,0,0,0,0,THUNK_2_0,,EF_,"stg_ap_2_upd_info","stg_ap_2_upd_info");
 FN_(stg_ap_2_upd_entry) {
   FB_
+  TICK_ENT_DYN_THK();  /* is it static or dynamic?? */
   STK_CHK_NP(sizeofW(StgUpdateFrame)+1,1,);
   UPD_BH_UPDATABLE(&stg_ap_2_upd_info);
+  LDV_ENTER(R1.cl);
   ENTER_CCS(R1.p);
   PUSH_UPD_FRAME(R1.p,0);
   Sp[-UF_SIZE-1]=(W_)(R1.cl->payload[1]);
@@ -188,8 +197,10 @@ FN_(stg_ap_2_upd_entry) {
 INFO_TABLE_SRT(stg_ap_3_upd_info,stg_ap_3_upd_entry,3,0,0,0,0,THUNK,,EF_,"stg_ap_3_upd_info","stg_ap_3_upd_info");
 FN_(stg_ap_3_upd_entry) {
   FB_
+  TICK_ENT_DYN_THK();  /* is it static or dynamic?? */
   STK_CHK_NP(sizeofW(StgUpdateFrame)+2,1,);
   UPD_BH_UPDATABLE(&stg_ap_3_upd_info);
+  LDV_ENTER(R1.cl);
   ENTER_CCS(R1.p);
   PUSH_UPD_FRAME(R1.p,0);
   Sp[-UF_SIZE-1]=(W_)(R1.cl->payload[2]);
@@ -203,8 +214,10 @@ FN_(stg_ap_3_upd_entry) {
 INFO_TABLE_SRT(stg_ap_4_upd_info,stg_ap_4_upd_entry,4,0,0,0,0,THUNK,,EF_,"stg_ap_4_upd_info","stg_ap_4_upd_info");
 FN_(stg_ap_4_upd_entry) {
   FB_
+  TICK_ENT_DYN_THK();  /* is it static or dynamic?? */
   STK_CHK_NP(sizeofW(StgUpdateFrame)+3,1,);
   UPD_BH_UPDATABLE(&stg_ap_4_upd_info);
+  LDV_ENTER(R1.cl);
   ENTER_CCS(R1.p);
   PUSH_UPD_FRAME(R1.p,0);
   Sp[-UF_SIZE-1]=(W_)(R1.cl->payload[3]);
@@ -219,8 +232,10 @@ FN_(stg_ap_4_upd_entry) {
 INFO_TABLE_SRT(stg_ap_5_upd_info,stg_ap_5_upd_entry,5,0,0,0,0,THUNK,,EF_,"stg_ap_5_upd_info","stg_ap_5_upd_info");
 FN_(stg_ap_5_upd_entry) {
   FB_
+  TICK_ENT_DYN_THK();  /* is it static or dynamic?? */
   STK_CHK_NP(sizeofW(StgUpdateFrame)+4,1,);
   UPD_BH_UPDATABLE(&stg_ap_5_upd_info);
+  LDV_ENTER(R1.cl);
   ENTER_CCS(R1.p);
   PUSH_UPD_FRAME(R1.p,0);
   Sp[-UF_SIZE-1]=(W_)(R1.cl->payload[4]);
@@ -236,8 +251,10 @@ FN_(stg_ap_5_upd_entry) {
 INFO_TABLE_SRT(stg_ap_6_upd_info,stg_ap_6_upd_entry,6,0,0,0,0,THUNK,,EF_,"stg_ap_6_upd_info","stg_ap_6_upd_info");
 FN_(stg_ap_6_upd_entry) {
   FB_
+  TICK_ENT_DYN_THK();  /* is it static or dynamic?? */
   STK_CHK_NP(sizeofW(StgUpdateFrame)+5,1,);
   UPD_BH_UPDATABLE(&stg_ap_6_upd_info);
+  LDV_ENTER(R1.cl);
   ENTER_CCS(R1.p);
   PUSH_UPD_FRAME(R1.p,0);
   Sp[-UF_SIZE-1]=(W_)(R1.cl->payload[5]);
@@ -254,8 +271,10 @@ FN_(stg_ap_6_upd_entry) {
 INFO_TABLE_SRT(stg_ap_7_upd_info,stg_ap_7_upd_entry,7,0,0,0,0,THUNK,,EF_,"stg_ap_7_upd_info","stg_ap_7_upd_info");
 FN_(stg_ap_7_upd_entry) {
   FB_
+  TICK_ENT_DYN_THK();  /* is it static or dynamic?? */
   STK_CHK_NP(sizeofW(StgUpdateFrame)+6,1,);
   UPD_BH_UPDATABLE(&stg_ap_7_upd_info);
+  LDV_ENTER(R1.cl);
   ENTER_CCS(R1.p);
   PUSH_UPD_FRAME(R1.p,0);
   Sp[-UF_SIZE-1]=(W_)(R1.cl->payload[6]);
@@ -273,8 +292,10 @@ FN_(stg_ap_7_upd_entry) {
 INFO_TABLE_SRT(stg_ap_8_upd_info,stg_ap_8_upd_entry,8,0,0,0,0,THUNK,,EF_,"stg_ap_8_upd_info","stg_ap_8_upd_info");
 FN_(stg_ap_8_upd_entry) {
   FB_
+  TICK_ENT_DYN_THK();  /* is it static or dynamic?? */
   STK_CHK_NP(sizeofW(StgUpdateFrame)+7,1,);
   UPD_BH_UPDATABLE(&stg_ap_8_upd_info);
+  LDV_ENTER(R1.cl);
   ENTER_CCS(R1.p);
   PUSH_UPD_FRAME(R1.p,0);
   Sp[-UF_SIZE-1]=(W_)(R1.cl->payload[7]);