fix haddock submodule pointer
[ghc-hetmet.git] / rts / StgStartup.cmm
index 2f2a759..f8940c4 100644 (file)
     ASSERT(Hp != 0);                   \
     ASSERT(Sp != 0);                   \
     ASSERT(SpLim != 0);                        \
-    ASSERT(HpLim != 0);                        \
-    ASSERT(SpLim - WDS(RESERVED_STACK_WORDS) <= Sp); \
-    ASSERT(HpLim >= Hp);
+    ASSERT(SpLim - WDS(RESERVED_STACK_WORDS) <= Sp);
 
 /* -----------------------------------------------------------------------------
    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 +122,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,46 +140,15 @@ 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)
-
-#ifdef REG_R1
-{
-  Sp_adj(1);
-  ENTER();
-}
-#else
-{
-  R1 = Sp(0);
-  Sp_adj(2);
-  ENTER();
-}
-#endif
-
-/* -----------------------------------------------------------------------------
-    Non-strict IO application.
 
-    This stack frame works like stg_forceIO_info except that it
-    doesn't evaluate the return value.  We need the layer because the
-    return convention for an IO action differs depending on whether R1
-    is a register or not.
     ------------------------------------------------------------------------- */
 
-INFO_TABLE_RET( stg_noforceIO, 0/*size*/, 0/*bitmap*/, RET_SMALL )
+INFO_TABLE_RET( stg_forceIO, RET_SMALL)
 
-#ifdef REG_R1
 {
   Sp_adj(1);
-  jump %ENTRY_CODE(Sp(0));
-}
-#else
-{
-  R1 = Sp(0);
-  Sp_adj(2);
-  jump %ENTRY_CODE(Sp(0));
+  ENTER();
 }
-#endif
 
 /* -----------------------------------------------------------------------------
    Special STG entry points for module registration.