Home My Page Projects Code Snippets Project Openings SML/NJ
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

[smlnj] Diff of /sml/trunk/runtime/gc/minor-gc.c
ViewVC logotype

Diff of /sml/trunk/runtime/gc/minor-gc.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 4373, Sat Aug 12 20:12:01 2017 UTC revision 4374, Sat Aug 12 20:39:00 2017 UTC
# Line 42  Line 42 
42    
43  /* Check a word for a allocation space reference */  /* Check a word for a allocation space reference */
44  #ifndef NO_GC_INLINE  #ifndef NO_GC_INLINE
45  #define MinorGC_CheckWord(bibop, g1, p) {                                       \  #define MinorGC_CheckWord(allocBase, allocSz, g1, p)    {                       \
46          ml_val_t        __w = *(p);                                             \          ml_val_t        __w = *(p);                                             \
47          if (isBOXED(__w) && (ADDR_TO_PAGEID(bibop, __w) == AID_NEW))            \          if (isBOXED(__w) && (((Addr_t)__w - (allocBase)) < (allocSz))) {        \
48              *(p) = MinorGC_ForwardObj(g1, __w);                                 \              *(p) = MinorGC_ForwardObj(g1, __w);                                 \
49            }                                                                       \
50      }      }
51  #else  #else
52  PVT void MinorGC_CheckWord (bibop_t bibop, gen_t *g1, ml_val_t *p)  PVT void MinorGC_CheckWord (Addr_t allocBase, Addr_t allocSz, gen_t *g1, ml_val_t *p)
53  {  {
54      ml_val_t    w = *(p);      ml_val_t    w = *(p);
55      if (isBOXED(w)) {      if (isBOXED(w) && (((Addr_t)w - allocBase) < allocSz)) {
56          aid_t   aid = ADDR_TO_PAGEID(bibop, w);          ASSERT(ADDR_TO_PAGEID(BIBOP, w) == AID_NEW);
         if (aid == AID_NEW)  
57              *(p) = MinorGC_ForwardObj(g1, w);              *(p) = MinorGC_ForwardObj(g1, w);
58      }      }
59  }  }
# Line 101  Line 101 
101    /* scan the standard roots */    /* scan the standard roots */
102      {      {
103          ml_val_t        *rp;          ml_val_t        *rp;
104          bibop_t         bibop = BIBOP;          Addr_t          allocBase = (Addr_t)heap->allocBase;
105            Addr_t          allocSz = heap->allocSzB;
106    
107          while ((rp = *roots++) != NIL(ml_val_t *)) {          while ((rp = *roots++) != NIL(ml_val_t *)) {
108              MinorGC_CheckWord(bibop, gen1, rp);              MinorGC_CheckWord(allocBase, allocSz, gen1, rp);
109          }          }
110      }      }
111    
# Line 166  Line 167 
167              nbytesCopied += nbytes;              nbytesCopied += nbytes;
168              CNTR_INCR(&(heap->numCopied[0][i]), nbytes);              CNTR_INCR(&(heap->numCopied[0][i]), nbytes);
169          }          }
   
 numBytesAlloc += nbytesAlloc;  
 numBytesCopied += nbytesCopied;  
 #ifdef XXX  
 SayDebug ("Minor GC: %d/%d (%5.2f%%) bytes copied; %d updates\n",  
 nbytesCopied, nbytesAlloc,  
 (nbytesAlloc ? (double)(100*nbytesCopied)/(double)nbytesAlloc : 0.0),  
 numUpdates-nUpdates);  
 #endif  
170      }      }
171  #endif  #endif
172    
# Line 268  Line 260 
260   */   */
261  PVT void MinorGC_SweepToSpace (gen_t *gen1)  PVT void MinorGC_SweepToSpace (gen_t *gen1)
262  {  {
263      bibop_t     bibop = BIBOP;      Addr_t      allocBase = (Addr_t)gen1->heap->allocBase;
264        Addr_t      allocSz = gen1->heap->allocSzB;
265      bool_t      swept;      bool_t      swept;
266    
267  #define MinorGC_SweepToSpArena(indx)    {                               \  #define MinorGC_SweepToSpArena(indx)    {                               \
# Line 278  Line 271 
271          if (__p < __ap->nextw) {                                        \          if (__p < __ap->nextw) {                                        \
272              swept = TRUE;                                               \              swept = TRUE;                                               \
273              do {                                                        \              do {                                                        \
274                  for (__q = __ap->nextw;  __p < __q;  __p++)             \                  for (__q = __ap->nextw;  __p < __q;  __p++) {           \
275                      MinorGC_CheckWord(bibop, gen1, __p);                \                      MinorGC_CheckWord(allocBase, allocSz, gen1, __p);   \
276                    }                                                       \
277              } while (__q != __ap->nextw);                               \              } while (__q != __ap->nextw);                               \
278              __ap->sweep_nextw = __q;                                    \              __ap->sweep_nextw = __q;                                    \
279          }                                                               \          }                                                               \

Legend:
Removed from v.4373  
changed lines
  Added in v.4374

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0