[project @ 2004-08-13 10:45:16 by simonmar]
[ghc-hetmet.git] / ghc / rts / HeapStackCheck.hc
index 2ab2023..2254b5c 100644 (file)
@@ -1,5 +1,5 @@
 /* -----------------------------------------------------------------------------
- * $Id: HeapStackCheck.hc,v 1.29 2003/03/19 18:56:14 sof Exp $
+ * $Id: HeapStackCheck.hc,v 1.31 2003/05/14 09:13:59 simonmar Exp $
  *
  * (c) The GHC Team, 1998-2002
  *
 
 INFO_TABLE_RET( stg_enter_info, stg_enter_ret, 
                MK_SMALL_BITMAP(1/*framesize*/, 0/*bitmap*/),
-               0/*SRT*/, 0/*SRT_OFF*/, 0/*SRT_LEN*/, 
+               0/*SRT*/, 0/*SRT_OFF*/, 0/*SRT_BITMAP*/, 
                RET_SMALL,, EF_, 0, 0);
 EXTFUN(stg_enter_ret)
 {
@@ -496,7 +496,7 @@ EXTFUN(stg_gc_noregs)
 
 INFO_TABLE_RET( stg_gc_void_info, stg_gc_void_ret, 
                MK_SMALL_BITMAP(0/*framesize*/, 0/*bitmap*/),
-               0/*SRT*/, 0/*SRT_OFF*/, 0/*SRT_LEN*/, 
+               0/*SRT*/, 0/*SRT_OFF*/, 0/*SRT_BITMAP*/, 
                RET_SMALL,, EF_, 0, 0);
 
 EXTFUN(stg_gc_void_ret)
@@ -511,7 +511,7 @@ EXTFUN(stg_gc_void_ret)
 
 INFO_TABLE_RET( stg_gc_unpt_r1_info, stg_gc_unpt_r1_ret, 
                MK_SMALL_BITMAP(1/*framesize*/, 0/*bitmap*/),
-               0/*SRT*/, 0/*SRT_OFF*/, 0/*SRT_LEN*/, 
+               0/*SRT*/, 0/*SRT_OFF*/, 0/*SRT_BITMAP*/, 
                RET_SMALL,, EF_, 0, 0);
 
 EXTFUN(stg_gc_unpt_r1_ret)
@@ -537,7 +537,7 @@ EXTFUN(stg_gc_unpt_r1)
 
 INFO_TABLE_RET(        stg_gc_unbx_r1_info, stg_gc_unbx_r1_ret, 
                MK_SMALL_BITMAP(1/*framesize*/, 1/*bitmap*/),
-               0/*SRT*/, 0/*SRT_OFF*/, 0/*SRT_LEN*/, 
+               0/*SRT*/, 0/*SRT_OFF*/, 0/*SRT_BITMAP*/, 
                RET_SMALL,, EF_, 0, 0);
 
 /* the 1 is a bitmap - i.e. 1 non-pointer word on the stack. */
@@ -565,7 +565,7 @@ EXTFUN(stg_gc_unbx_r1)
 
 INFO_TABLE_RET(        stg_gc_f1_info, stg_gc_f1_ret, 
                MK_SMALL_BITMAP(1/*framesize*/, 1/*bitmap*/),
-               0/*SRT*/, 0/*SRT_OFF*/, 0/*SRT_LEN*/, 
+               0/*SRT*/, 0/*SRT_OFF*/, 0/*SRT_BITMAP*/, 
                RET_SMALL,, EF_, 0, 0);
 
 EXTFUN(stg_gc_f1_ret)
@@ -601,7 +601,7 @@ EXTFUN(stg_gc_f1)
 
 INFO_TABLE_RET(        stg_gc_d1_info, stg_gc_d1_ret, 
                MK_SMALL_BITMAP(DBL_WORDS/*framesize*/, DBL_BITMAP/*bitmap*/),
-               0/*SRT*/, 0/*SRT_OFF*/, 0/*SRT_LEN*/, 
+               0/*SRT*/, 0/*SRT_OFF*/, 0/*SRT_BITMAP*/, 
                RET_SMALL,, EF_, 0, 0);
 
 EXTFUN(stg_gc_d1_ret)
@@ -638,7 +638,7 @@ EXTFUN(stg_gc_d1)
 
 INFO_TABLE_RET( stg_gc_l1_info, stg_gc_l1_ret, 
                MK_SMALL_BITMAP(LLI_WORDS/*framesize*/, LLI_BITMAP/*bitmap*/),
-               0/*SRT*/, 0/*SRT_OFF*/, 0/*SRT_LEN*/, 
+               0/*SRT*/, 0/*SRT_OFF*/, 0/*SRT_BITMAP*/, 
                RET_SMALL,, EF_, 0, 0);
 
 EXTFUN(stg_gc_l1_ret)
@@ -664,7 +664,7 @@ EXTFUN(stg_gc_l1)
 
 INFO_TABLE_RET( stg_ut_1_0_unreg_info, stg_ut_1_0_unreg_ret, 
                MK_SMALL_BITMAP(1/*size*/, 0/*BITMAP*/),
-               0/*SRT*/, 0/*SRT_OFF*/, 0/*SRT_LEN*/, 
+               0/*SRT*/, 0/*SRT_OFF*/, 0/*SRT_BITMAP*/, 
                RET_SMALL,, EF_, 0, 0);
 
 EXTFUN(stg_ut_1_0_unreg_ret)
@@ -758,7 +758,7 @@ EXTFUN(__stg_gc_fun)
 
 INFO_TABLE_RET( stg_gc_fun_info,stg_gc_fun_ret,
                MK_SMALL_BITMAP(0/*framesize*/, 0/*bitmap*/),
-               0/*SRT*/, 0/*SRT_OFF*/, 0/*SRT_LEN*/, 
+               0/*SRT*/, 0/*SRT_OFF*/, 0/*SRT_BITMAP*/, 
                RET_FUN,, EF_, 0, 0);
 
 EXTFUN(stg_gc_fun_ret)
@@ -810,6 +810,7 @@ EXTFUN(stg_gc_fun_ret)
 // it's not a big deal.
 
 #define RESTORE_EVERYTHING                     \
+    L1   = PK_Word64(Sp+19);                   \
     D2   = PK_DBL(Sp+17);                      \
     D1   = PK_DBL(Sp+15);                      \
     F4   = PK_FLT(Sp+14);                      \
@@ -824,12 +825,13 @@ EXTFUN(stg_gc_fun_ret)
     R3.w = Sp[5];                              \
     R2.w = Sp[4];                              \
     R1.w = Sp[3];                              \
-    Sp += 19;
+    Sp += 21;
 
-#define RET_OFFSET (-17)
+#define RET_OFFSET (-19)
 
 #define SAVE_EVERYTHING                                \
-    Sp -= 19;                                  \
+    Sp -= 21;                                  \
+    ASSIGN_Word64(Sp+19,L1);                   \
     ASSIGN_DBL(Sp+17,D2);                      \
     ASSIGN_DBL(Sp+15,D1);                      \
     ASSIGN_FLT(Sp+14,F4);                      \
@@ -850,7 +852,7 @@ EXTFUN(stg_gc_fun_ret)
 
 INFO_TABLE_RET( stg_gc_gen_info, stg_gc_gen_ret, 
                0/*bitmap*/,
-               0/*SRT*/, 0/*SRT_OFF*/, 0/*SRT_LEN*/, 
+               0/*SRT*/, 0/*SRT_OFF*/, 0/*SRT_BITMAP*/, 
                RET_DYN,, EF_, 0, 0);
 
 /* bitmap in the above info table is unused, the real one is on the stack. 
@@ -978,7 +980,7 @@ FN_(stg_block_1)
 
 INFO_TABLE_RET( stg_block_takemvar_info,  stg_block_takemvar_ret,
                MK_SMALL_BITMAP(1/*framesize*/, 0/*bitmap*/),
-               0/*SRT*/, 0/*SRT_OFF*/, 0/*SRT_LEN*/, 
+               0/*SRT*/, 0/*SRT_OFF*/, 0/*SRT_BITMAP*/, 
                RET_SMALL,, IF_, 0, 0);
 
 IF_(stg_block_takemvar_ret)
@@ -1002,7 +1004,7 @@ FN_(stg_block_takemvar)
 
 INFO_TABLE_RET( stg_block_putmvar_info,  stg_block_putmvar_ret,
                MK_SMALL_BITMAP(2/*framesize*/, 0/*bitmap*/),
-               0/*SRT*/, 0/*SRT_OFF*/, 0/*SRT_LEN*/, 
+               0/*SRT*/, 0/*SRT_OFF*/, 0/*SRT_BITMAP*/, 
                RET_SMALL,, IF_, 0, 0);
 
 IF_(stg_block_putmvar_ret)
@@ -1029,7 +1031,7 @@ FN_(stg_block_putmvar)
 #ifdef mingw32_TARGET_OS
 INFO_TABLE_RET( stg_block_async_info,  stg_block_async_ret,
                MK_SMALL_BITMAP(0/*framesize*/, 0/*bitmap*/),
-               0/*SRT*/, 0/*SRT_OFF*/, 0/*SRT_LEN*/, 
+               0/*SRT*/, 0/*SRT_OFF*/, 0/*SRT_BITMAP*/, 
                RET_SMALL,, IF_, 0, 0);
 
 IF_(stg_block_async_ret)