swap <[]> and <{}> syntax
[ghc-hetmet.git] / rts / sm / Storage.h
index ea744a7..d463d1a 100644 (file)
@@ -9,7 +9,9 @@
 #ifndef SM_STORAGE_H
 #define SM_STORAGE_H
 
 #ifndef SM_STORAGE_H
 #define SM_STORAGE_H
 
-#pragma GCC visibility push(hidden)
+#include "Capability.h"
+
+#include "BeginPrivate.h"
 
 /* -----------------------------------------------------------------------------
    Initialisation / De-initialisation
 
 /* -----------------------------------------------------------------------------
    Initialisation / De-initialisation
 
 void initStorage(void);
 void exitStorage(void);
 
 void initStorage(void);
 void exitStorage(void);
-void freeStorage(void);
+void freeStorage(rtsBool free_heap);
 
 /* -----------------------------------------------------------------------------
    Storage manager state
    -------------------------------------------------------------------------- */
 
 
 /* -----------------------------------------------------------------------------
    Storage manager state
    -------------------------------------------------------------------------- */
 
-extern bdescr * pinned_object_block;
-
-extern nat alloc_blocks;
-extern nat alloc_blocks_lim;
-
 INLINE_HEADER rtsBool
 INLINE_HEADER rtsBool
-doYouWantToGC( void )
+doYouWantToGC( Capability *cap )
 {
 {
-  return (alloc_blocks >= alloc_blocks_lim);
+  return (cap->r.rCurrentNursery->link == NULL ||
+          g0->n_new_large_words >= large_alloc_lim);
 }
 
 /* for splitting blocks groups in two */
 }
 
 /* for splitting blocks groups in two */
@@ -40,11 +38,6 @@ bdescr * splitLargeBlock (bdescr *bd, nat blocks);
 /* -----------------------------------------------------------------------------
    Generational garbage collection support
 
 /* -----------------------------------------------------------------------------
    Generational garbage collection support
 
-   recordMutable(StgPtr p)       Informs the garbage collector that a
-                                previously immutable object has
-                                become (permanently) mutable.  Used
-                                by thawArray and similar.
-
    updateWithIndirection(p1,p2)  Updates the object at p1 with an
                                 indirection pointing to p2.  This is
                                 normally called for objects in an old
    updateWithIndirection(p1,p2)  Updates the object at p1 with an
                                 indirection pointing to p2.  This is
                                 normally called for objects in an old
@@ -71,59 +64,8 @@ extern Mutex sm_mutex;
 #define ASSERT_SM_LOCK()
 #endif
 
 #define ASSERT_SM_LOCK()
 #endif
 
-INLINE_HEADER void
-recordMutableGen(StgClosure *p, nat gen_no)
-{
-    bdescr *bd;
-
-    bd = generations[gen_no].mut_list;
-    if (bd->free >= bd->start + BLOCK_SIZE_W) {
-       bdescr *new_bd;
-       new_bd = allocBlock();
-       new_bd->link = bd;
-       bd = new_bd;
-       generations[gen_no].mut_list = bd;
-    }
-    *bd->free++ = (StgWord)p;
-
-}
-
-INLINE_HEADER void
-recordMutableGenLock(StgClosure *p, nat gen_no)
-{
-    ACQUIRE_SM_LOCK;
-    recordMutableGen(p,gen_no);
-    RELEASE_SM_LOCK;
-}
-
-INLINE_HEADER void
-recordMutable(StgClosure *p)
-{
-    bdescr *bd;
-    ASSERT(closure_MUTABLE(p));
-    bd = Bdescr((P_)p);
-    if (bd->gen_no > 0) recordMutableGen(p, bd->gen_no);
-}
-
-INLINE_HEADER void
-recordMutableLock(StgClosure *p)
-{
-    ACQUIRE_SM_LOCK;
-    recordMutable(p);
-    RELEASE_SM_LOCK;
-}
-
-/* -----------------------------------------------------------------------------
-   This is the write barrier for MUT_VARs, a.k.a. IORefs.  A
-   MUT_VAR_CLEAN object is not on the mutable list; a MUT_VAR_DIRTY
-   is.  When written to, a MUT_VAR_CLEAN turns into a MUT_VAR_DIRTY
-   and is put on the mutable list.
-   -------------------------------------------------------------------------- */
-
-void dirty_MUT_VAR(StgRegTable *reg, StgClosure *p);
-
 /* -----------------------------------------------------------------------------
 /* -----------------------------------------------------------------------------
-   Similarly, the write barrier for MVARs
+   The write barrier for MVARs
    -------------------------------------------------------------------------- */
 
 void dirty_MVAR(StgRegTable *reg, StgClosure *p);
    -------------------------------------------------------------------------- */
 
 void dirty_MVAR(StgRegTable *reg, StgClosure *p);
@@ -132,7 +74,10 @@ void dirty_MVAR(StgRegTable *reg, StgClosure *p);
    Nursery manipulation
    -------------------------------------------------------------------------- */
 
    Nursery manipulation
    -------------------------------------------------------------------------- */
 
+extern nursery *nurseries;
+
 void     resetNurseries       ( void );
 void     resetNurseries       ( void );
+lnat     clearNurseries       ( void );
 void     resizeNurseries      ( nat blocks );
 void     resizeNurseriesFixed ( nat blocks );
 lnat     countNurseryBlocks   ( void );
 void     resizeNurseries      ( nat blocks );
 void     resizeNurseriesFixed ( nat blocks );
 lnat     countNurseryBlocks   ( void );
@@ -141,33 +86,32 @@ lnat     countNurseryBlocks   ( void );
    Stats 'n' DEBUG stuff
    -------------------------------------------------------------------------- */
 
    Stats 'n' DEBUG stuff
    -------------------------------------------------------------------------- */
 
-extern ullong total_allocated;
-
-lnat    calcAllocated  (void);
-lnat    calcLiveBlocks (void);
-lnat    calcLiveWords  (void);
+lnat    calcAllocated  (rtsBool count_nurseries);
 lnat    countOccupied  (bdescr *bd);
 lnat    calcNeeded     (void);
 lnat    countOccupied  (bdescr *bd);
 lnat    calcNeeded     (void);
-HsInt64 getAllocations (void);
 
 
-#if defined(DEBUG)
-void    memInventory       (rtsBool show);
-void    checkSanity        (void);
-nat     countBlocks        (bdescr *);
-void    checkNurserySanity (step *stp);
-#endif
+lnat    gcThreadLiveWords  (nat i, nat g);
+lnat    gcThreadLiveBlocks (nat i, nat g);
+
+lnat    genLiveWords  (generation *gen);
+lnat    genLiveBlocks (generation *gen);
+
+lnat    calcLiveBlocks (void);
+lnat    calcLiveWords  (void);
 
 /* ----------------------------------------------------------------------------
    Storage manager internal APIs and globals
    ------------------------------------------------------------------------- */
 
 
 /* ----------------------------------------------------------------------------
    Storage manager internal APIs and globals
    ------------------------------------------------------------------------- */
 
+extern bdescr *exec_block;
+
 #define END_OF_STATIC_LIST ((StgClosure*)1)
 
 #define END_OF_STATIC_LIST ((StgClosure*)1)
 
-void move_TSO  (StgTSO *src, StgTSO *dest);
+void move_STACK  (StgStack *src, StgStack *dest);
 
 extern StgClosure * caf_list;
 extern StgClosure * revertible_caf_list;
 
 
 extern StgClosure * caf_list;
 extern StgClosure * revertible_caf_list;
 
-#pragma GCC visibility pop
+#include "EndPrivate.h"
 
 #endif /* SM_STORAGE_H */
 
 #endif /* SM_STORAGE_H */